Scott (scott@vorthmann.org)
2018-08-28 21:21:27

@Scott has joined the channel

Scott (scott@vorthmann.org)
2018-08-29 22:22:13

here @David Hall

David Hall (david.42.hall@gmail.com)
2018-08-29 22:22:17

@David Hall has joined the channel

Scott (scott@vorthmann.org)
2018-08-29 22:22:37

to keep the streams from crossing

David Hall (david.42.hall@gmail.com)
2018-08-29 22:23:10

nice feature. Guess that comes from using Slack a lot.

Scott (scott@vorthmann.org)
2018-08-29 22:23:24

way too much

Scott (scott@vorthmann.org)
2018-08-29 22:23:31

it's like I get paid to do it

David Hall (david.42.hall@gmail.com)
2018-08-29 22:23:41

😉

Scott (scott@vorthmann.org)
2018-08-29 22:24:23

I'm pretty jazzed about the possibilities of Observable, and Javascript puts a lot of power in the hands of the notebook author

David Hall (david.42.hall@gmail.com)
2018-08-29 22:25:52

Looking forward to checking out Jacob's Zome Math page too, but I think I'll be pretty busy thru Labor Day. We're having a pool party here on Sat & Mon, so I have some work to do to get ready in the next few days.

Scott (scott@vorthmann.org)
2018-08-29 22:26:03

nice

Scott (scott@vorthmann.org)
2018-08-29 22:26:24

you've been awfully productive lately, so you get a vacation

Scott (scott@vorthmann.org)
2018-08-29 22:26:28

I still need to catch up

Scott (scott@vorthmann.org)
2018-08-29 22:26:42

while I'm desperately trying to keep up with Jacob

David Hall (david.42.hall@gmail.com)
2018-08-29 22:28:05

Biggest hurdle for me with reusing javascript is finding modular examples of stuff and learning what libraries are available and then they have their own learning curves.

Scott (scott@vorthmann.org)
2018-08-29 22:28:19

yes

Scott (scott@vorthmann.org)
2018-08-29 22:28:44

D3 is worth learning, I'd say... a very nice abstraction

Scott (scott@vorthmann.org)
2018-08-29 22:28:58

and it sort of comes with learning Observable

Scott (scott@vorthmann.org)
2018-08-29 22:29:37

I had heard about D3 for years, and thought, "Oh, a charting library", and imagined exactly the opposite of what it is

David Hall (david.42.hall@gmail.com)
2018-08-29 22:30:40

Yeah, D3 seems to be a pretty common factor.

Scott (scott@vorthmann.org)
2018-08-29 22:31:10

I know you'll like it, just knowing your love of visualization

David Hall (david.42.hall@gmail.com)
2018-08-29 22:31:43

What do you think about adding the CORS header to the vzome server? Is that something you can do easily?

Scott (scott@vorthmann.org)
2018-08-29 22:32:16

Probably... need to look into it. I was also wondering how much I'd have to pay to get a cert and go HTTPS

David Hall (david.42.hall@gmail.com)
2018-08-29 22:32:40

Being able to use a plain fetch would be nice.

Scott (scott@vorthmann.org)
2018-08-29 22:32:47

Dreamhost, my hosting provider, usually has VERY good documentation about such things, and even better support people.

Scott (scott@vorthmann.org)
2018-08-29 22:33:24

Yes... but a Gist would be easier, probably... and would be something we could build into vZome... Gist upload.

Scott (scott@vorthmann.org)
2018-08-29 22:33:41

Oh, an idea I shared with Jacob, but you'll like it:

David Hall (david.42.hall@gmail.com)
2018-08-29 22:33:44

Many hostsing sites have very cheap SSL now-a-days.

Scott (scott@vorthmann.org)
2018-08-29 22:34:11

Yes, I would bet I can get it for a click and a fee

Scott (scott@vorthmann.org)
2018-08-29 22:34:39

here's the idea: a "copy to clipboard" tool that is configurable in terms of export format

Scott (scott@vorthmann.org)
2018-08-29 22:35:06

want VEF? sure. JSON for Observable? no problem. STL, whatever

Scott (scott@vorthmann.org)
2018-08-29 22:35:19

use the selection, or just the whole model if there is no selection

David Hall (david.42.hall@gmail.com)
2018-08-29 22:35:22

copy from Observable or vZome? (or both)?

Scott (scott@vorthmann.org)
2018-08-29 22:35:33

copy from vZome, paste into Observable or wherever

Scott (scott@vorthmann.org)
2018-08-29 22:36:21

Of course, the polymorphic paste in vZome might not be easy... unless we can use clipboard metadata in a cross-platform way.

Scott (scott@vorthmann.org)
2018-08-29 22:36:38

might need a new abstraction layer to support at least Mac and Windows

Scott (scott@vorthmann.org)
2018-08-29 22:37:00

but I'm not worried about paste... we can require VEF there

Scott (scott@vorthmann.org)
2018-08-29 22:37:32

I just want a smooth workflow for getting models into Observable

David Hall (david.42.hall@gmail.com)
2018-08-29 22:37:35

As long as they're all text based, I think it would be simple and wouldn't need any OS specific code.

Scott (scott@vorthmann.org)
2018-08-29 22:38:16

you'd like to have a MIME type... so a recipient can say "JSON? No!"

Scott (scott@vorthmann.org)
2018-08-29 22:38:22

or whatever

David Hall (david.42.hall@gmail.com)
2018-08-29 22:38:39

JSON is still text.

David Hall (david.42.hall@gmail.com)
2018-08-29 22:38:52

not like JPG

Scott (scott@vorthmann.org)
2018-08-29 22:39:04

sure

Scott (scott@vorthmann.org)
2018-08-29 22:39:30

I'm thinking of vZome paste... we'd require VEF only, or maybe the new VSON that also has exact numbers

David Hall (david.42.hall@gmail.com)
2018-08-29 22:39:31

clipboard doesn't care about mime types AFAIK

Scott (scott@vorthmann.org)
2018-08-29 22:40:05

I know the Mac clipboard supports some type notion... just assumed it was MIME

David Hall (david.42.hall@gmail.com)
2018-08-29 22:42:15

Window can too. For example, I can copy formatted text (e.g. HTML) and paste it as HTML or as text, but as long as we keep it all as just text, the mime type (or equivalent) shouldn't matter.

David Hall (david.42.hall@gmail.com)
2018-08-29 22:42:43

Oops - Should we be in the vZome channel?

Scott (scott@vorthmann.org)
2018-08-29 22:42:54

the user has to choose how to paste? or the

Scott (scott@vorthmann.org)
2018-08-29 22:42:55

LOL

Scott (scott@vorthmann.org)
2018-08-29 22:43:06

@jrus will be at home here

jrus (me@jacobrus.com)
2018-08-29 22:43:08

@jrus has joined the channel

David Hall (david.42.hall@gmail.com)
2018-08-29 22:43:09

This could get complicated 😉

Scott (scott@vorthmann.org)
2018-08-29 22:43:26

with only three of us, channel discipline is not that important

Scott (scott@vorthmann.org)
2018-08-29 22:43:46

helps a bit with discovery/search of old conversations

jrus (me@jacobrus.com)
2018-08-29 22:44:26

howdy

Scott (scott@vorthmann.org)
2018-08-29 22:44:46

thanks for joining us @jrus!

Scott (scott@vorthmann.org)
2018-08-29 22:45:00

I'll stick with "Jacob" unless I want you to beep

jrus (me@jacobrus.com)
2018-08-29 22:45:24

@Scott I changed the name

Scott (scott@vorthmann.org)
2018-08-29 22:45:49

still

Scott (scott@vorthmann.org)
2018-08-29 22:45:59

but that's good

David Hall (david.42.hall@gmail.com)
2018-08-29 22:46:00

depends on how it's copied. If the copying app copies it as formatted text, or an image or plain text, or a link to a file, or whatever, the pasting app has to be able to paste it that format. Some apps copy in multiple formats and they the pasting depends on which the pasting app chooses, but if we stay with just text, then it's all good.

Scott (scott@vorthmann.org)
2018-08-29 22:46:42

I can't remember seeing an app offer me a choice of paste type, so I guess the app usually determines what's "best"

Scott (scott@vorthmann.org)
2018-08-29 22:46:46

but it doesn't matter

jrus (me@jacobrus.com)
2018-08-29 22:46:58

on a mac, you can copy multiple types

David Hall (david.42.hall@gmail.com)
2018-08-29 22:47:02

Hi Jacob. Thanks for turning Scott (and me) on to Observable. Looks like fun.

Scott (scott@vorthmann.org)
2018-08-29 22:47:04

yes

jrus (me@jacobrus.com)
2018-08-29 22:47:35

and then the pasting app can pick which one it wants

Scott (scott@vorthmann.org)
2018-08-29 22:47:40

yup

jrus (me@jacobrus.com)
2018-08-29 22:47:56

so you could e.g. copy both a text string and an image

David Hall (david.42.hall@gmail.com)
2018-08-29 22:47:58

true. most apps would decide based on the paste context. Chrome is one I know that gives the user the option to Paste, or Paste as plain text.

Scott (scott@vorthmann.org)
2018-08-29 22:48:08

I think for vZome we'll keep it simple... we three are probably the only users that will ever use the "copy export" feature

jrus (me@jacobrus.com)
2018-08-29 22:48:12

but I think just text is fine

jrus (me@jacobrus.com)
2018-08-29 22:48:44

@David Hall you maybe saw my hacked up prototyping https://beta.observablehq.com/@jrus/zome-arithmetic

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-08-29 22:49:04

yes, all the exports will be text... but could be JSON, VEF, STL, etc.

Scott (scott@vorthmann.org)
2018-08-29 22:49:04

yes, I shared it

Scott (scott@vorthmann.org)
2018-08-29 22:49:08

oh, can I share the goofy pic of Simon?

Scott (scott@vorthmann.org)
2018-08-29 22:49:19

on text, not here

jrus (me@jacobrus.com)
2018-08-29 22:49:24

sure

David Hall (david.42.hall@gmail.com)
2018-08-29 22:49:31

Scott sent me the link earlier tonight. I'm looking forward to checking it out - hopefully tomorrow.

jrus (me@jacobrus.com)
2018-08-29 22:49:48

the chinese government is already going to have a bunch of photos of simon via wechat

Scott (scott@vorthmann.org)
2018-08-29 22:50:02

lmao

Scott (scott@vorthmann.org)
2018-08-29 22:50:14

check ur fone DH

Scott (scott@vorthmann.org)
2018-08-29 22:50:31

he's asleep, yes

Scott (scott@vorthmann.org)
2018-08-29 22:50:33

!

Scott (scott@vorthmann.org)
2018-08-29 22:51:24

so are you using the browser or the app, Jacob?

jrus (me@jacobrus.com)
2018-08-29 22:51:30

the app

Scott (scott@vorthmann.org)
2018-08-29 22:52:43

I appreciate both of you accommodating me... David and I had been using Google Hangouts primarily

jrus (me@jacobrus.com)
2018-08-29 22:52:49

oh hey, size reduction to 80% makes it much better

David Hall (david.42.hall@gmail.com)
2018-08-29 22:52:51

Ouch. That would be painful. How old is he now?

jrus (me@jacobrus.com)
2018-08-29 22:53:13

he turned 2 3 weeks ago

Scott (scott@vorthmann.org)
2018-08-29 22:53:50

you can change skins, if you don't like slate-purple or whatever

David Hall (david.42.hall@gmail.com)
2018-08-29 22:53:59

Cool. He is zonked!

Scott (scott@vorthmann.org)
2018-08-29 22:54:40

sorry, "Aubergine"

Scott (scott@vorthmann.org)
2018-08-29 22:55:55

@jrus to catch you up a bit, I'm merging most of David's 8 (!) pull requests on vZome, and generally getting back in control of my local repo. That includes running full regression as I speak, just in case David made a bug (or I did).

Scott (scott@vorthmann.org)
2018-08-29 22:56:23

I want to get to a stable spot so I can cut a build that has the new exporter.

jrus (me@jacobrus.com)
2018-08-29 22:56:46

gotcha

jrus (me@jacobrus.com)
2018-08-29 22:56:50

anyway, orbitcontrols is lame

jrus (me@jacobrus.com)
2018-08-29 22:57:08

I'm not a big fan of any of those mouse 3d rotator tools

David Hall (david.42.hall@gmail.com)
2018-08-29 22:57:09

by new exporter, you mean json, not clipboard, right?

jrus (me@jacobrus.com)
2018-08-29 22:57:17

I wanted to do some research about this at some point

Scott (scott@vorthmann.org)
2018-08-29 22:57:26

I'm going to switch to TrackballControl... I should do that now

jrus (me@jacobrus.com)
2018-08-29 22:57:35

what is the most useful and effective UI for rotating with (a) mouse, and (b) multitouch

Scott (scott@vorthmann.org)
2018-08-29 22:57:39

it is what vZome does

jrus (me@jacobrus.com)
2018-08-29 22:57:54

yeah, it's what most 3d thingies have done for decades

jrus (me@jacobrus.com)
2018-08-29 22:57:58

I have always found it lame

jrus (me@jacobrus.com)
2018-08-29 22:58:00

but anywya

Scott (scott@vorthmann.org)
2018-08-29 22:58:01

I still can't accept anything accept an analogue of the old Centipedes (etc) trackball

Scott (scott@vorthmann.org)
2018-08-29 22:58:04

predictable

jrus (me@jacobrus.com)
2018-08-29 22:58:17

I told you about my 3D trackball project that never really got off the ground right?

Scott (scott@vorthmann.org)
2018-08-29 22:58:19

no gymbal lock

jrus (me@jacobrus.com)
2018-08-29 22:58:32

I bought a couple of high-resolution laser mouse sensors

jrus (me@jacobrus.com)
2018-08-29 22:58:36

a nice trackball

jrus (me@jacobrus.com)
2018-08-29 22:58:39

and some ball transfer units

Scott (scott@vorthmann.org)
2018-08-29 22:58:41

I think so, yes. Not sure what part of the trackball frustrates you though...?

jrus (me@jacobrus.com)
2018-08-29 22:58:57

oh, most trackballs don't send quaternion input to the computer

jrus (me@jacobrus.com)
2018-08-29 22:59:02

so you can't use them for arbitrary 3d rotation

jrus (me@jacobrus.com)
2018-08-29 22:59:14

they just have 2-d motion tracking

Scott (scott@vorthmann.org)
2018-08-29 22:59:24

oh, right... but are you OK with the way we map mouse drag to rotation in vZome?

jrus (me@jacobrus.com)
2018-08-29 22:59:28

one of the axes of rotation is ignored

David Hall (david.42.hall@gmail.com)
2018-08-29 22:59:28

although I do like the right-click pan capability of OrbitControl. I assume that TrackballControl has that too. It would be nice in vZome too.

jrus (me@jacobrus.com)
2018-08-29 22:59:47

@Scott I think there may be better ways to do rotation with a mouse

Scott (scott@vorthmann.org)
2018-08-29 22:59:53

yes, threejs TrackballControl also has pan and zoom

jrus (me@jacobrus.com)
2018-08-29 22:59:55

but I didn't ever do the research

jrus (me@jacobrus.com)
2018-08-29 23:00:32

with a mouse or multitouch I want to see how it works to do an invisible stereographic projection

Scott (scott@vorthmann.org)
2018-08-29 23:01:01

I can imagine playing with acceleration, momentum, or whatever, but I can't imagine a better way to map direction

Scott (scott@vorthmann.org)
2018-08-29 23:02:08

hmmm... I think stereographic might feel like those controls where you lose "gain" as you get to the edge

jrus (me@jacobrus.com)
2018-08-29 23:02:10

no, acceleration, etc. is gimmicky bullshit

Scott (scott@vorthmann.org)
2018-08-29 23:02:20

glad to hear it

jrus (me@jacobrus.com)
2018-08-29 23:02:23

you want something that responds precisely

Scott (scott@vorthmann.org)
2018-08-29 23:02:31

linearly!

Scott (scott@vorthmann.org)
2018-08-29 23:02:36

at least for me

jrus (me@jacobrus.com)
2018-08-29 23:02:42

with a stereographic projection you would need to do multiple drags for some rotations

Scott (scott@vorthmann.org)
2018-08-29 23:03:25

interesting... but don't get distracted 😉

David Hall (david.42.hall@gmail.com)
2018-08-29 23:03:46

I recall one of the first things I wanted to be able to do n vzome was lock the rotation around an axis. We just never came up with a good UI to lock or unlock it. Having the mouse controller map to just one direction of roation is the easy part.

Scott (scott@vorthmann.org)
2018-08-29 23:04:00

yes, I remember

Scott (scott@vorthmann.org)
2018-08-29 23:04:20

we do that for "working plane mode" when dragging struts

Scott (scott@vorthmann.org)
2018-08-29 23:05:03

shouldn't be hard to use the same MouseAdapter or whatever for drag... just tricky to define the axis (plane)

David Hall (david.42.hall@gmail.com)
2018-08-29 23:05:25

My idea was to rotate around just X or Y, but Z could be nice too, just a bit harder to implement.

Scott (scott@vorthmann.org)
2018-08-29 23:05:29

these are the sorts of things that may already exist in threejs

David Hall (david.42.hall@gmail.com)
2018-08-29 23:05:34

yup

Scott (scott@vorthmann.org)
2018-08-29 23:05:55

OK, I have to get kids off computers and in bed

Scott (scott@vorthmann.org)
2018-08-29 23:06:07

back in a while

David Hall (david.42.hall@gmail.com)
2018-08-29 23:06:15

If so, we could play with them there first and see which we really like rather than which we can imagine.

David Hall (david.42.hall@gmail.com)
2018-08-29 23:06:34

OK. I'm gonna crash too.

David Hall (david.42.hall@gmail.com)
2018-08-29 23:06:52

Good to see you Jacob, g'nite all.

David Hall (david.42.hall@gmail.com)
2018-08-29 23:08:09

I'll leave Slack running in case y'all have anything I should see in the morning.

jrus (me@jacobrus.com)
2018-08-29 23:08:11

cheers

Scott (scott@vorthmann.org)
2018-08-29 23:08:30

first kick delivered

Scott (scott@vorthmann.org)
2018-08-29 23:08:33

gn, dh

Scott (scott@vorthmann.org)
2018-08-29 23:10:50

@jrus I've been trying to anticipate how you'll map the symmetry function to segment-sets

jrus (me@jacobrus.com)
2018-08-29 23:11:10

what's a segment-set?

jrus (me@jacobrus.com)
2018-08-29 23:11:17

oh, just a set of segments

jrus (me@jacobrus.com)
2018-08-29 23:11:32

I was planning to just apply symmetry to each segment, and then discard duplicates

Scott (scott@vorthmann.org)
2018-08-29 23:11:38

the noun I mentioned the other night... your basic "model"

jrus (me@jacobrus.com)
2018-08-29 23:11:38

by throwing them all in a set

jrus (me@jacobrus.com)
2018-08-29 23:12:04

so I just need to write a simple javascript "SegmentSet" class or whatever

Scott (scott@vorthmann.org)
2018-08-29 23:12:41

OK, I'll understand when I see it. Still not up to speed on all the newer ES6 tricks

jrus (me@jacobrus.com)
2018-08-29 23:12:44

@Scott oh actually

jrus (me@jacobrus.com)
2018-08-29 23:12:51

apparently Javascript has real sets now

Scott (scott@vorthmann.org)
2018-08-29 23:12:52

and many of the older Javascript tricks

jrus (me@jacobrus.com)
2018-08-29 23:12:57

for the past few years

Scott (scott@vorthmann.org)
2018-08-29 23:13:03

didn't know that

jrus (me@jacobrus.com)
2018-08-29 23:13:17

some missing features in IE, but supported everywhere else including edge

Scott (scott@vorthmann.org)
2018-08-29 23:13:27

based on what? some Hashable notion?

jrus (me@jacobrus.com)
2018-08-29 23:14:30

sure

jrus (me@jacobrus.com)
2018-08-29 23:14:43

I'm not sure how to put mutable objects in there and have them compare properly etc.

jrus (me@jacobrus.com)
2018-08-29 23:14:45

I'll read

Scott (scott@vorthmann.org)
2018-08-29 23:15:29

good stuff

Scott (scott@vorthmann.org)
2018-08-29 23:16:12

will be important for me... vZome relies on hashsets quite a bit

Scott (scott@vorthmann.org)
2018-08-29 23:16:24

hard to imagine how to do without

David Hall (david.42.hall@gmail.com)
2018-08-29 23:18:05

Jacob, what's your email address? I have some ideas for your zome math page. I won't get to them til tomorrow though.

David Hall (david.42.hall@gmail.com)
2018-08-29 23:18:16

Now I'm really off to bed.

jrus (me@jacobrus.com)
2018-08-29 23:18:34

@David Hall jacob.rus@gmail, or me@jacobrus.com, or various others

David Hall (david.42.hall@gmail.com)
2018-08-29 23:19:13

ok. any preference?

jrus (me@jacobrus.com)
2018-08-29 23:19:32

@Scott so the main issue is that it seems arrays in a set are compared by identity, which doesn't really help as [1, 2, 3] and [1, 2, 3] are going to be different objects. not sure if there's a way around that or if I need to implement my own class built on Map

jrus (me@jacobrus.com)
2018-08-29 23:19:35

@David Hall doesn't matter

jrus (me@jacobrus.com)
2018-08-29 23:19:41

they go the same place

David Hall (david.42.hall@gmail.com)
2018-08-29 23:19:50

ok. g'nite

jrus (me@jacobrus.com)
2018-08-29 23:20:05

@David Hall you can also paste notes in here

jrus (me@jacobrus.com)
2018-08-29 23:20:10

or whatever

Scott (scott@vorthmann.org)
2018-08-29 23:31:22

you can start with just accepting duplicates, perhaps... not sure what threejs will do, but it might only affect performance

Scott (scott@vorthmann.org)
2018-08-29 23:33:33

with Java3d, overlapping polygons cause odd interference effects

Scott (scott@vorthmann.org)
2018-08-29 23:34:02

but mostly only when I highlight one of them... otherwise you cannot tell

Scott (scott@vorthmann.org)
2018-08-29 23:35:02

off to bed myself... good night

jrus (me@jacobrus.com)
2018-08-30 00:24:21

g'night

jrus (me@jacobrus.com)
2018-08-30 00:50:26

@Scott okay, this is the lamest type of deduplicator. just naively turns each item into a string https://beta.observablehq.com/@jrus/zome-arithmetic#deduplicate

Scott (scott@vorthmann.org)
2018-08-30 07:28:47

yes, as I feared, Set is just based on ===, which does not do deep object / array equality

Scott (scott@vorthmann.org)
2018-08-30 07:29:14

looks like lodash has a good equals()... maybe they have a Set class based on that

jrus (me@jacobrus.com)
2018-08-30 08:35:13

@Scott it's possible to make another class based on Map where internally the keys are some string and the values are the struts, but externally it looks just like a Set

jrus (me@jacobrus.com)
2018-08-30 08:36:28

@Scott but for most purposes I think it's fine to use a list and occasionally call this kind of dedup function

jrus (me@jacobrus.com)
2018-08-30 12:41:29

for a set, the way to test equality is via some kind of 'hash' function which produces the same string/number/etc. output for equal objects, not via an equals() method per se.

David Hall (david.42.hall@gmail.com)
2018-08-30 13:02:55
David Hall (david.42.hall@gmail.com)
2018-08-30 13:03:23

Top row of https://beta.observablehq.com/@jrus/wolfram-cellular-automaton is offset 😉

beta.observablehq.com
jrus (me@jacobrus.com)
2018-08-30 13:03:36

@David Hall that's the way that cellular automaton works

jrus (me@jacobrus.com)
2018-08-30 13:03:50

@David Hall also, that code is from a 12 year old, I didn't write it

jrus (me@jacobrus.com)
2018-08-30 13:04:13

I just put it there because he provided a downloadable nodejs project, and I thought people might want to see the code run right away

jrus (me@jacobrus.com)
2018-08-30 13:04:31

he made a hacker news post, linked from the top of that page

David Hall (david.42.hall@gmail.com)
2018-08-30 13:05:01

hmmm. I figured it should be a Serpinski triangle. I'll have to look a little closer.

jrus (me@jacobrus.com)
2018-08-30 13:05:58

it is a sierpinski triangle. it's just that you can't really have a halfway-offset cell in this type of cellular automaton

jrus (me@jacobrus.com)
2018-08-30 13:06:12

if you render it using pixels and zoom way out it won't be noticed

David Hall (david.42.hall@gmail.com)
2018-08-30 13:08:01

OK. I see now. All of the other complete horizontal lines have an even number of cells.

David Hall (david.42.hall@gmail.com)
2018-08-30 13:08:03

Cool

jrus (me@jacobrus.com)
2018-08-30 13:19:22

@Scott your vzome-rendering-component could use better names for the 'defaultShapes':)

jrus (me@jacobrus.com)
2018-08-30 13:19:46

b24400ca and 9a5c3332 aren't the most evocative

Scott (scott@vorthmann.org)
2018-08-30 19:53:12

yes, that's the next step, as I said

Scott (scott@vorthmann.org)
2018-08-30 19:53:25

what's there is just a temporary hack

Scott (scott@vorthmann.org)
2018-08-30 19:55:09

hint: the ball shape has lots more faces 😉

Scott (scott@vorthmann.org)
2018-08-30 19:58:21

and be happy that I went through and shrunk the IDs from 40 characters down to 8

Scott (scott@vorthmann.org)
2018-08-30 21:00:22

from my new "copy.observable" command

jrus (me@jacobrus.com)
2018-08-30 23:02:18

@Scott btw, here's one with some cleaned up whitespace https://beta.observablehq.com/d/8cc4eb94a0adb9c9#defaultShapes

Scott (scott@vorthmann.org)
2018-08-30 23:04:38

oh, sorry you went to that trouble... now I have a new set with better names

jrus (me@jacobrus.com)
2018-08-30 23:04:50

it took no more than a couple minutes

Scott (scott@vorthmann.org)
2018-08-30 23:04:59

https://beta.observablehq.com/@vorth/vzome-rendering-component

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-08-30 23:05:02

of course

jrus (me@jacobrus.com)
2018-08-30 23:05:28

@Scott you might have to re-publish that

Scott (scott@vorthmann.org)
2018-08-30 23:05:34

thought I did

Scott (scott@vorthmann.org)
2018-08-30 23:05:48

publish button is grey

jrus (me@jacobrus.com)
2018-08-30 23:06:02

I'm still seeing b24400ca etc.

Scott (scott@vorthmann.org)
2018-08-30 23:06:16

you're still looking at defaultShapes

Scott (scott@vorthmann.org)
2018-08-30 23:06:19

I added another set

Scott (scott@vorthmann.org)
2018-08-30 23:06:31

icosahedralRYBGshapes

Scott (scott@vorthmann.org)
2018-08-30 23:06:38

four sizes of four colors

jrus (me@jacobrus.com)
2018-08-30 23:06:45

aha

jrus (me@jacobrus.com)
2018-08-30 23:06:53

so that's fetching from github?

Scott (scott@vorthmann.org)
2018-08-30 23:06:57

yes

Scott (scott@vorthmann.org)
2018-08-30 23:07:18

also, I added the getGeometry() function to handle the fallback

Scott (scott@vorthmann.org)
2018-08-30 23:07:23

still more refinements to come

Scott (scott@vorthmann.org)
2018-08-30 23:07:43

lots in fact... like camera override

Scott (scott@vorthmann.org)
2018-08-30 23:08:00

I also fixed my import of THREE as Mike indicated

Scott (scott@vorthmann.org)
2018-08-30 23:08:27

and https://beta.observablehq.com/@vorth/vzomerenderer-component-demonstration no longer imports the fetcher notebook

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-08-30 23:09:00

The triacontahedron in that notebook was directly pasted in from vZome

jrus (me@jacobrus.com)
2018-08-30 23:09:00

cool

Scott (scott@vorthmann.org)
2018-08-30 23:10:07

I am planning to cut a build soon... or I can offer another export that gives you your segment-list format, also

jrus (me@jacobrus.com)
2018-08-30 23:10:36

is there a reason for the names of the blues to be multiples of 2 while red and yellow get names that are multiples of 1?

jrus (me@jacobrus.com)
2018-08-30 23:10:50

maybe you sometimes do half-blue struts?

Scott (scott@vorthmann.org)
2018-08-30 23:11:03

not a great reason... just using an existing function on my model object

Scott (scott@vorthmann.org)
2018-08-30 23:11:11

yes, vZome can do half blues

Scott (scott@vorthmann.org)
2018-08-30 23:11:16

and half greens

jrus (me@jacobrus.com)
2018-08-30 23:11:21

gotcha

Scott (scott@vorthmann.org)
2018-08-30 23:12:03

I can tweak the naming, of course... this was quick and easy to produce

jrus (me@jacobrus.com)
2018-08-30 23:12:10

we can probably make some code in the not too distant future which generates these strut geometries

Scott (scott@vorthmann.org)
2018-08-30 23:12:39

I already have them, though! They are all model-driven, of course

Scott (scott@vorthmann.org)
2018-08-30 23:13:09

we can, of course, do a generic strut geometry... I should share that with you

jrus (me@jacobrus.com)
2018-08-30 23:13:22

yeah, or if you want to stretch to an unusual size

Scott (scott@vorthmann.org)
2018-08-30 23:13:40

oh, there's a better way... stretchable shapes. This is how I store them internally

jrus (me@jacobrus.com)
2018-08-30 23:13:43

or do you just draw those as multiples of standard zome struts?

jrus (me@jacobrus.com)
2018-08-30 23:13:56

maybe for some purposes that makes sense

Scott (scott@vorthmann.org)
2018-08-30 23:14:18

no, my shape definitions have designated vertices that get scaled out to match the strut endpoint

jrus (me@jacobrus.com)
2018-08-30 23:14:32

sure

jrus (me@jacobrus.com)
2018-08-30 23:14:38

I would expect so

Scott (scott@vorthmann.org)
2018-08-30 23:14:43

I can also support half-scaled geometry bits... to do the antiprisms in the middle of traditional Zome

Scott (scott@vorthmann.org)
2018-08-30 23:15:09

so I'm intending to export JSON for all my shape definitions... with the scalability built in

jrus (me@jacobrus.com)
2018-08-30 23:15:24

it seems like standard zome struts have a prism part at each end and an antiprism part in the middle?

Scott (scott@vorthmann.org)
2018-08-30 23:15:46

yes, but I hate that... for yellow, in particular

jrus (me@jacobrus.com)
2018-08-30 23:15:51

roughly 1/3 1/3 1/3 in length?

Scott (scott@vorthmann.org)
2018-08-30 23:15:52

breaks the visual line of the strut

Scott (scott@vorthmann.org)
2018-08-30 23:16:04

no, the antiprism is constant length

jrus (me@jacobrus.com)
2018-08-30 23:16:28

aha, I was just looking at medium length struts

Scott (scott@vorthmann.org)
2018-08-30 23:16:43

I prefer "no-twist" struts that have a twisted frustum at both ends, and a clean, straight prism for most of the body

Scott (scott@vorthmann.org)
2018-08-30 23:17:25

vZome has a style for that

jrus (me@jacobrus.com)
2018-08-30 23:18:21

@Scott actually it seems to differ between zome generations

jrus (me@jacobrus.com)
2018-08-30 23:18:29

how big the antiprism part is

Scott (scott@vorthmann.org)
2018-08-30 23:18:32

but you are correct, we could define a reasonably good algorithm for deriving a "nice" shape for an arbitrary orbit, based on ball geometry and some design principles

Scott (scott@vorthmann.org)
2018-08-30 23:18:47

about ball diameter, it seems

Scott (scott@vorthmann.org)
2018-08-30 23:19:00

I don't remember how I modeled it

jrus (me@jacobrus.com)
2018-08-30 23:19:15

maybe I can measure with calipers at some point

jrus (me@jacobrus.com)
2018-08-30 23:19:20

not going to bother at the moment

Scott (scott@vorthmann.org)
2018-08-30 23:19:26

not worth it

jrus (me@jacobrus.com)
2018-08-30 23:20:21

so what does the straight prism look like for a 3-fold or 5-fold axis?

jrus (me@jacobrus.com)
2018-08-30 23:20:34

I guess I can open vzome and look

jrus (me@jacobrus.com)
2018-08-30 23:21:41

it seems like you have the antiprisms for red/yellow in this vzome renderer demo thingy atleast

jrus (me@jacobrus.com)
2018-08-30 23:22:31

and in vzome. or you just mean for non-standard struts?

Scott (scott@vorthmann.org)
2018-08-30 23:22:38

For your rendering pleasure

Scott (scott@vorthmann.org)
2018-08-30 23:24:34

vZome's default style and "lifelike" style both use the standard shapes. Try the "tiny connectors" or "small dodecahedra" styles... under "System", "Shapes"

Scott (scott@vorthmann.org)
2018-08-30 23:25:21

the latter two are no-twist prisms. I did make a style that uses normal balls and no-twist struts, but looks like I have not hooked it up. Probably unfinished.

Scott (scott@vorthmann.org)
2018-08-30 23:27:56

From my latest "default strut geometry" class in vZome:

Scott (scott@vorthmann.org)
2018-08-30 23:27:57

* Since every field allows octahedral symmetry, we want the richest triangular * tiling of that symmetry, which means we want the fundamental triangles of * the reflection group, by definition. Rather than rely on any symmetry orbits, * we can simply hard-code the vertices of a disdyakis dodecahedron, all * reflections and permutations of (8,0,0), (4,4,4), and (5,5,0). * (This is a simple approximation with integers.) * These vertices correspond to blue-like, yellow-like, and green-like axes, * in the usual Zome coloring.

Scott (scott@vorthmann.org)
2018-08-30 23:29:33

What it doesn't say is how I derive a quadrilateral prism shape from that geometry... I'll have to read the code for the details

Scott (scott@vorthmann.org)
2018-08-30 23:29:47

you can probably work something out easily enough, anyway

Scott (scott@vorthmann.org)
2018-08-30 23:29:57

// y1n-----------g1n // |\ A /| // | \ / | // | y2---g2 | // |D | | B| // | | | | // | g2n---y2n | // | / \ | // |/ C \| // g1-----------y1

Scott (scott@vorthmann.org)
2018-08-30 23:30:10

works better as a snippet, sorry

jrus (me@jacobrus.com)
2018-08-30 23:30:32

I like the 'lifelike' version 🙂

Scott (scott@vorthmann.org)
2018-08-30 23:31:19

yes, I'm going to capture all my existing styles and put them in the base notebook... and add a parameter to select a style when rendering

jrus (me@jacobrus.com)
2018-08-30 23:32:09

I don't quite get what 'richest triangular tiling of that symmetry' means

Scott (scott@vorthmann.org)
2018-08-30 23:33:09

meaning, how do you get the most triangles given a symmetry group... obviously you want the fundamental Coxeter domains (or their Gnomonic projection)

jrus (me@jacobrus.com)
2018-08-30 23:33:33

this is just for the purpose of drawing a rectangle pointing in some arbitrary direction?

Scott (scott@vorthmann.org)
2018-08-30 23:34:01

An octahedron represents a (spherical) triangular tiling of the symmetry group, but it is "poor" in terms of the number of distinct triangles.

Scott (scott@vorthmann.org)
2018-08-30 23:34:12

precisely

Scott (scott@vorthmann.org)
2018-08-30 23:34:28

when vZome makes a new orbit (a white one), I need to render a strut

Scott (scott@vorthmann.org)
2018-08-30 23:34:44

so I derive this simple prism shape

jrus (me@jacobrus.com)
2018-08-30 23:34:56

btw, would you consider changing your strut colors? they seem pretty arbitrary and not very well spaced apart

Scott (scott@vorthmann.org)
2018-08-30 23:35:27

oh, that's 15 years of precedent to overturn...

Scott (scott@vorthmann.org)
2018-08-30 23:35:29

just kidding

Scott (scott@vorthmann.org)
2018-08-30 23:35:53

vZome allows rendering "styles" to use different colors, so I can define a new style with better colors

jrus (me@jacobrus.com)
2018-08-30 23:35:59

you can leave them. I don't really need to make models with arbitrary directions

Scott (scott@vorthmann.org)
2018-08-30 23:36:40

I tried to make them well-spaced, but it got increasingly difficult... "maroon" and "cinnamon" are way too close, for example

jrus (me@jacobrus.com)
2018-08-30 23:36:42

how did you decide which 'orbits' to give colors to?

jrus (me@jacobrus.com)
2018-08-30 23:37:19

did I link you to http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/ before?

Extreme Learning
jrus (me@jacobrus.com)
2018-08-30 23:37:25

this is only vaguely related

Scott (scott@vorthmann.org)
2018-08-30 23:37:27

it started with obvious things like orange (red-orthogonal) and purple (yellow-orthogonal). Then it proceeded to orbits that appeared in some 4D polytope projections

Scott (scott@vorthmann.org)
2018-08-30 23:37:34

yes

Scott (scott@vorthmann.org)
2018-08-30 23:37:51

the orbits are not anywhere near quasirandom

jrus (me@jacobrus.com)
2018-08-30 23:38:05

that's not the point of the link

Scott (scott@vorthmann.org)
2018-08-30 23:38:07

the vertex-first 120-cell brought in maroon, lavender, and olive

jrus (me@jacobrus.com)
2018-08-30 23:38:29

I want to make a little observable notebook which makes a categorical color scheme with widely separated colors

jrus (me@jacobrus.com)
2018-08-30 23:38:33

and arbitrary numbers of them

Scott (scott@vorthmann.org)
2018-08-30 23:38:35

the face-first 120-cell brought in ... navy, peach, and sulfur? not sure

jrus (me@jacobrus.com)
2018-08-30 23:38:41

that keep getting added on

Scott (scott@vorthmann.org)
2018-08-30 23:38:52

oh, nice

jrus (me@jacobrus.com)
2018-08-30 23:38:55

as far as reasonably possible from previous colors used

Scott (scott@vorthmann.org)
2018-08-30 23:39:17

I could use that, yes

jrus (me@jacobrus.com)
2018-08-30 23:39:22

I think something like these quasirandom sequences can be used to choose colors within some other constraints

Scott (scott@vorthmann.org)
2018-08-30 23:39:42

vZome used to try to generate quasi-random pastel colors, when generating new orbits

jrus (me@jacobrus.com)
2018-08-30 23:39:45

e.g. from a roughly cylindrical region in CIELAB space (or the like)

Scott (scott@vorthmann.org)
2018-08-30 23:39:55

yes, good stuff

jrus (me@jacobrus.com)
2018-08-30 23:40:13

so it would try to pick colors which are more or less all pretty brightly colored

jrus (me@jacobrus.com)
2018-08-30 23:40:22

that is, colorful

jrus (me@jacobrus.com)
2018-08-30 23:40:41

but of varying lightness

Scott (scott@vorthmann.org)
2018-08-30 23:40:54

yes, I like it

jrus (me@jacobrus.com)
2018-08-30 23:41:13

It is going to take a few days of work at least to figure out the particulars

jrus (me@jacobrus.com)
2018-08-30 23:41:24

I need to make a smoothish cylindrical-ish shape

Scott (scott@vorthmann.org)
2018-08-30 23:41:27

colored orbits are very much at the heart of the aesthetic of vZome, so this would be very good

Scott (scott@vorthmann.org)
2018-08-30 23:41:42

to replace all the whites

jrus (me@jacobrus.com)
2018-08-30 23:42:10

of course there would still be no meaningful association between directions -> colors in such a system

Scott (scott@vorthmann.org)
2018-08-30 23:42:19

but could you "seed" it with 17 or so predefined colors? 😉

jrus (me@jacobrus.com)
2018-08-30 23:42:19

you might have to do some additional work on top for that

Scott (scott@vorthmann.org)
2018-08-30 23:42:54

yes, a scheme that blends colors according to the RYB corners would be interesting

jrus (me@jacobrus.com)
2018-08-30 23:43:01

I have had various times where I needed to pick several separated colors

jrus (me@jacobrus.com)
2018-08-30 23:43:04

and it took a bunch of manual effort

jrus (me@jacobrus.com)
2018-08-30 23:43:17

e.g. I picked like 8 or 9 distinct colors for an iphone game once

Scott (scott@vorthmann.org)
2018-08-30 23:43:27

but I thought it would be too confusing... nearly red in color AND direction would be hard to distinguish from exactly red

jrus (me@jacobrus.com)
2018-08-30 23:43:36

for sure

Scott (scott@vorthmann.org)
2018-08-30 23:44:36

David has done a bunch of hidden coloring tools for vZome, using all sorts of information from a model. I'll have to show you how to enable it.

Scott (scott@vorthmann.org)
2018-08-30 23:44:52

Not coloring orbits... coloring objects

Scott (scott@vorthmann.org)
2018-08-30 23:45:29

I'm going to head for bed shortly... let's try to talk tomorrow evening?

jrus (me@jacobrus.com)
2018-08-30 23:45:41

sure

Scott (scott@vorthmann.org)
2018-08-30 23:46:22

I'm enjoying this immensely, even if I have trouble keeping up with you sometimes... hope it is working for you

Scott (scott@vorthmann.org)
2018-08-30 23:48:56

one more explanation... the existing colored orbits correspond to "great circle" intersections. For example, draw a green circle wherever a green plane intersects the sphere. Most of the colored orbits fall on triple intersections, at least. All fall on at least a double intersection. I should do a notebook about these lines and planes.

jrus (me@jacobrus.com)
2018-08-30 23:52:02

yeah, drawing lines on a sphere is pretty easy with d3-geo stuff

jrus (me@jacobrus.com)
2018-08-30 23:52:20

you can easily project onto other map projections where some of the features are more visible

Scott (scott@vorthmann.org)
2018-08-30 23:54:05

yes, that will be a fun one... can use your math notebook

Scott (scott@vorthmann.org)
2018-08-30 23:55:24

I'm imagining something pretty interactive... select an orbit to add its planes, then generate new orbits from plane intersections... and capture the orbit for use in vZome etc.

jrus (me@jacobrus.com)
2018-08-30 23:57:05

@Scott I'm also curious if 3JS (or other existing webgl code) can make a more photorealistic render

jrus (me@jacobrus.com)
2018-08-30 23:57:28

without going all the way to using a ray tracer offline or whatever

Scott (scott@vorthmann.org)
2018-08-30 23:57:42

there are various techniques for shadows and gimmicks like that... but I don't think anyone has a live ray-tracer yet

jrus (me@jacobrus.com)
2018-08-30 23:57:51

doesn't have to be perfect

jrus (me@jacobrus.com)
2018-08-30 23:58:13

but rounding off some of the corners, adding some surface texture, using fancier lighting methods, etc.

Scott (scott@vorthmann.org)
2018-08-30 23:58:25

one popular new idea is "ray-marching"... Henry Segerman and friends have been using that, also Roice Nelson

jrus (me@jacobrus.com)
2018-08-30 23:59:13

anyway, gotta read a book with simon, ttyl

Scott (scott@vorthmann.org)
2018-08-30 23:59:17

improved lighting is important. I've never been to excited about slowing down the rendering... I usually look for ways to render more objects

Scott (scott@vorthmann.org)
2018-08-30 23:59:46

and you pretty quickly get into the realm of sending arrays to the graphics card

jrus (me@jacobrus.com)
2018-08-30 23:59:49

gpus are pretty damn good at adding effects in shaders

Scott (scott@vorthmann.org)
2018-08-30 23:59:54

but of course, the cards are pretty good

Scott (scott@vorthmann.org)
2018-08-30 23:59:55

yes

Scott (scott@vorthmann.org)
2018-08-31 00:00:09

it is a different world from when I started!

Scott (scott@vorthmann.org)
2018-08-31 00:00:40

threejs does offer the ability to customize shaders, I believe. I have never played with it

Scott (scott@vorthmann.org)
2018-08-31 00:01:18

I did do quite a bit with vertex buffers when I worked with Android, but that has been 4-5 years ago now

Scott (scott@vorthmann.org)
2018-08-31 00:02:02

good night... say "hey" to Simon

jrus (me@jacobrus.com)
2018-08-31 12:00:45

@David Hall you think this is a big enough cache? https://beta.observablehq.com/@jrus/zome-arithmetic#simplify3

jrus (me@jacobrus.com)
2018-08-31 12:02:45

@David Hall or should I also be adding a hash table cache to the GCD function itself? I doubt there is going to be all that much arithmetic with values ≥ 256, but that’s just my speculation

jrus (me@jacobrus.com)
2018-08-31 12:04:37

the nice thing about caching just small arithmetic is that the results can be 8-bit integers, so the cache doesn't take much memory

jrus (me@jacobrus.com)
2018-08-31 12:08:22

the main win here is probably avoiding trying the GCD for values that are already simplified to lowest terms. though this code still takes 27 arithmetic operations just to remove/add signs, compute the index into the cache, and so on.

David Hall (david.42.hall@gmail.com)
2018-08-31 12:46:40

vZome only calculates gcd for a pair of integers (actually longs). Its cache is a 128x128 byte array. Otherwise, it's calculated.

David Hall (david.42.hall@gmail.com)
2018-08-31 12:47:58
jrus (me@jacobrus.com)
2018-08-31 12:48:08

@David Hall that doesn't save you the division steps though

David Hall (david.42.hall@gmail.com)
2018-08-31 12:49:12

only if the numbers are in the cache

jrus (me@jacobrus.com)
2018-08-31 12:49:46

what I mean is, to simplify you need to (a) find the gcd, and then (b) divide each component by that vallue

David Hall (david.42.hall@gmail.com)
2018-08-31 12:50:58

that's correct.

David Hall (david.42.hall@gmail.com)
2018-08-31 12:55:22

I don't have it any more, but at the time, I ran a count of how often the gcd cache was hit vs calculated when opening all of the regression files and decided that 128 really was a reasonable trade-off. It only used 16K for the cache, which was hit a good bit of the time. I don't recall the number though.

David Hall (david.42.hall@gmail.com)
2018-08-31 12:58:48

The point of my original email wasn't necessarily to recommend a cache as it is to suggest the Google Commons gcd algorithm, though caching is easier to implement, especially if you think you'll be using a lot of small integers.

jrus (me@jacobrus.com)
2018-08-31 13:00:17

ah. I doubt a 50% performance difference only on large values makes that much difference for most purposes. Or if it does, adding another layer of hash-table based cache to the GCD function is probably a better fix.

jrus (me@jacobrus.com)
2018-08-31 13:00:46

it doesn't really hurt anything to switch to the binary gcd algorithm, though it's a bit trickier code

jrus (me@jacobrus.com)
2018-08-31 13:01:32

@David Hall did you test the relative performance not just for single GCD operations but for the full simplification of arbitrary values you typically get as the result of algebraic rational arithmetic?

David Hall (david.42.hall@gmail.com)
2018-08-31 13:01:40

It was only after I had written most of the email that I discovered JavaScript uses floating point numbers under the hood, so it is limited to Number.MAXSAFEINTEGER rather than Long.MAX_VALUE, and the best algorithm was based on a 64 bit integer, so it may not even work correctly in javaScript.

jrus (me@jacobrus.com)
2018-08-31 13:02:29

@David Hall one thing about the binary GCD algorithm is that it doesn't have much advantage vs. the Euclidean algorithm when the sizes of the two integers are very far apart (because then number of iterations and therefore cache misses increases, and this outweighs avoiding some divisions)

jrus (me@jacobrus.com)
2018-08-31 13:02:57

@David Hall so the advantage for a 3-element GCD is less than for a 2-element GCD on average

David Hall (david.42.hall@gmail.com)
2018-08-31 13:03:20

The only such test was to notice that gcd dropped way down from #1 in the CPU usage chart of the profiler. I didn't get more specific than that.

jrus (me@jacobrus.com)
2018-08-31 13:03:27

and the advantage really goes away if you have, say, 5 or 6 elements

jrus (me@jacobrus.com)
2018-08-31 13:03:41

one way you can improve things is to do one division step, followed by the binary method

jrus (me@jacobrus.com)
2018-08-31 13:03:58

this roughly normalizes the sizes of the two integers up front

jrus (me@jacobrus.com)
2018-08-31 13:04:48

[this is assuming you are trying to simplify a proportion of like 4 20-digit numbers or whatever]

jrus (me@jacobrus.com)
2018-08-31 13:05:35

really all this performance tuning depends a lot on what kind of values you are typically dealing with

David Hall (david.42.hall@gmail.com)
2018-08-31 13:05:53

I haven't looked at your code enough to understand the use case for gcd with more than 2 parameters since it seems they would eventually boil down to the 2 param function.

jrus (me@jacobrus.com)
2018-08-31 13:06:13

GCD of 3 values a, b, c, is just gcd(gcd(a, b), c)

jrus (me@jacobrus.com)
2018-08-31 13:06:49

but if you have arbitrary numbers, there is a good chance that gcd(a, b) is already a very small number

jrus (me@jacobrus.com)
2018-08-31 13:07:01

in which case it might be much smaller than c

David Hall (david.42.hall@gmail.com)
2018-08-31 13:07:04

right, so caaching the 2 param version is sufficient and way less overrhead in code and memory

jrus (me@jacobrus.com)
2018-08-31 13:07:25

50 megabytes is a pretty trivial amount of memory

jrus (me@jacobrus.com)
2018-08-31 13:07:50

but sure, it's plenty possible to only cache up to 127 if that covers most uses

jrus (me@jacobrus.com)
2018-08-31 13:08:39

the big questions are (a) how big are the values you typically need to simplify, and (b) how often do you get repeated attempts to simplify the same values vs. unrelated ones

David Hall (david.42.hall@gmail.com)
2018-08-31 13:08:41

I guess so, but I was raised on 64K ROMs in embedded controllers. 😉

jrus (me@jacobrus.com)
2018-08-31 13:09:09

the advantage of caching the 3-input simplification function is that you skip the division steps

jrus (me@jacobrus.com)
2018-08-31 13:09:57

avoiding 3 divisions is likely to be a big speedup if you need to simplify small arithmetic for a very large number of poitns

David Hall (david.42.hall@gmail.com)
2018-08-31 13:10:24

so that would be another thing to benchmark to see if the cache is worth the ROI

jrus (me@jacobrus.com)
2018-08-31 13:10:32

would need to directly test on some real-world inputs

jrus (me@jacobrus.com)
2018-08-31 13:10:39

but I don't really have the best sense of what those are

jrus (me@jacobrus.com)
2018-08-31 13:10:58

for vzome, or even for whatever we might want to do with golden rationals in the browser

David Hall (david.42.hall@gmail.com)
2018-08-31 13:13:41

It seems odd to me that 50M of RAM is considered cheap, but ??? division(s) are expensive. Yes. Ultimately, it comes down to finding where the real bottle necks exist and fixing them, not where we think they might be. That's why I said the java optimizations in vZome may not translate to javaScript.

jrus (me@jacobrus.com)
2018-08-31 13:14:21

well this would be under the assumption that you need to do millions of simplification steps

jrus (me@jacobrus.com)
2018-08-31 13:14:26

and you want to do your arithmetic in real time

jrus (me@jacobrus.com)
2018-08-31 13:15:01

like, someone wants to make very complicated zome models with huge numbers of points by clicking on little buttons and you want instant response

jrus (me@jacobrus.com)
2018-08-31 13:15:24

50m is trivial in the sense that my browser routinely uses 20 gigabytes of memory

jrus (me@jacobrus.com)
2018-08-31 13:18:08

it's obviously not free, but individual web pages are often full of 1 megabyte each images, videos that take hundreds of megabytes, etc.

jrus (me@jacobrus.com)
2018-08-31 13:18:34

let's just do values up to 127 though. that sounds fine

jrus (me@jacobrus.com)
2018-08-31 13:19:32

that takes <100 milliseconds to compute

David Hall (david.42.hall@gmail.com)
2018-08-31 13:20:28

Another thing I was addressing in vZome at the same time as gcd was handing overflows. It was a trade-off between using native longs whenever possible and using BigIntegers when necessary, and transparently dealing with that in the BigRational class which is the basis for nearly all math in vZome. Again, that's probably been done in some well tested libraries which have their own gcd functions.

jrus (me@jacobrus.com)
2018-08-31 13:21:34

I was curious, how often do you do arithmetic in vzome that overflows 64-bit integers?

David Hall (david.42.hall@gmail.com)
2018-08-31 13:25:01

Most models don't overflow, and I was surprised to see that I could actually do a lot without needing a denominator greater than 1. In other words, lots of the coordinates are in the order of + or - 1023 and often less.

David Hall (david.42.hall@gmail.com)
2018-08-31 13:27:51

Another way to answer your question is that Scott has had vZome for maybe 15 years, and the overflow bugs just surfaced for the first time AFAIK, last year when I was messing with somewhat larger models in the HeptagonField. That's when I fixed them and tweaked the gcd method in the process.

David Hall (david.42.hall@gmail.com)
2018-08-31 13:34:22

Currently, vZome only specifies 3G total for the JRE to use at run-time.

jrus (me@jacobrus.com)
2018-08-31 13:37:44

gotcha

jrus (me@jacobrus.com)
2018-08-31 13:48:47

@David Hall yes there is a huge amount which can be done with just integers with no need for rational arithmetic. if this can be assumed it saves a lot of computation

jrus (me@jacobrus.com)
2018-08-31 13:49:36

anyway, okay, your answer is encouraging that we won't need super large integers for most "build and display a zome model" kinds of use cases

Scott (scott@vorthmann.org)
2018-08-31 14:44:00

Right... Only models that do successive generations of divisions would approach large denominators. I'm not sure why that happened in the heptagon-based models... It might not have been denominators at all, just "finer grained" heptagonal numbers... Bigger coordinate factors

Scott (scott@vorthmann.org)
2018-08-31 14:45:20

Do a VEF export, @David Hall ... See what the numbers look like 😁

jrus (me@jacobrus.com)
2018-08-31 17:00:38

@David Hall okay, I added caching to both gcd and simplify, ~2 megabytes and ~6 megabytes, respectively, which take ~35 and ~50 milliseconds to compute at startup on my desktop machine

jrus (me@jacobrus.com)
2018-08-31 17:01:37

@David Hall additionally the gcd will return a cached value as soon as the size of the numbers gets small enough

jrus (me@jacobrus.com)
2018-08-31 17:02:36

I suspect there won't be much further benefit (beyond the caching) in using the binary algorithm, so I'm not going to bother implementing it

jrus (me@jacobrus.com)
2018-08-31 17:08:15

also I switched cache index order, so small denominators end up at the beginning of the cache and values with the same denominator end up nearby. The very start of the cache should be read much more than the rest, so this might reduce the number of cpu cache misses.

jrus (me@jacobrus.com)
2018-08-31 17:09:18

I'm not going to worry any further about GCD optimization unless there's some obvious bottleneck after profiling

jrus (me@jacobrus.com)
2018-08-31 17:30:11

@Scott when you make 3js faces for rectangles/pentagons, those get triangulated right? How do you decide which triangles to use?

Scott (scott@vorthmann.org)
2018-08-31 17:30:56

I just make a fan based on the vertex order in the face

Scott (scott@vorthmann.org)
2018-08-31 17:34:00

Works as long as the first 3 vertices are not collinear, or something like that. David recently removed that restriction on a branch, I believe... Moves the fan Apex as necessary

jrus (me@jacobrus.com)
2018-08-31 17:34:03

gotcha

jrus (me@jacobrus.com)
2018-08-31 17:34:07

makes sense

jrus (me@jacobrus.com)
2018-08-31 17:34:53

when you render zome balls, are the rectangles golden rectangles?

Scott (scott@vorthmann.org)
2018-08-31 17:34:56

Ok until you render as SVG with edge lines

Scott (scott@vorthmann.org)
2018-08-31 17:35:07

Yes golden

jrus (me@jacobrus.com)
2018-08-31 17:35:21

so the vertices are at a funny orbit w/r/t the center

jrus (me@jacobrus.com)
2018-08-31 17:35:35

what color orbit is that one in vzome?

Scott (scott@vorthmann.org)
2018-08-31 17:35:44

The zome ball is designed that way

jrus (me@jacobrus.com)
2018-08-31 17:35:51

right

jrus (me@jacobrus.com)
2018-08-31 17:35:56

I made a big zome ball just now

jrus (me@jacobrus.com)
2018-08-31 17:35:58

physically

jrus (me@jacobrus.com)
2018-08-31 17:36:02

I'm trying to figure out the coordinates

Scott (scott@vorthmann.org)
2018-08-31 17:36:03

The Navy strut orbit

Scott (scott@vorthmann.org)
2018-08-31 17:37:50

Long blue as radius,

Scott (scott@vorthmann.org)
2018-08-31 17:38:18

Old long blue... B3

Scott (scott@vorthmann.org)
2018-08-31 17:38:48

Then face edges are b1 and b0 I believe

jrus (me@jacobrus.com)
2018-08-31 17:39:19

so to get from the center to an outer ball maybe takes some half blues or half greens?

jrus (me@jacobrus.com)
2018-08-31 17:39:35

I think I have the 'diameter' constructed via red-green-red

jrus (me@jacobrus.com)
2018-08-31 17:39:51

in my physical shape here

Scott (scott@vorthmann.org)
2018-08-31 17:40:20

B3, half b1, half b0

Scott (scott@vorthmann.org)
2018-08-31 17:40:23

I think

Scott (scott@vorthmann.org)
2018-08-31 17:41:04

I'm on the bus, at 5%

jrus (me@jacobrus.com)
2018-08-31 17:41:06

ah yeah, I figured it out, I can also construct it via 3 blue struts

jrus (me@jacobrus.com)
2018-08-31 17:43:33

er, 4 blue struts

Scott (scott@vorthmann.org)
2018-08-31 17:43:35

vZome could help you 😁

jrus (me@jacobrus.com)
2018-08-31 17:43:48

oh here we go

jrus (me@jacobrus.com)
2018-08-31 17:43:52

it's red yellow yellow red

jrus (me@jacobrus.com)
2018-08-31 17:44:02

I was going to the wrong place with my red-green-red

Scott (scott@vorthmann.org)
2018-08-31 17:44:41

I gave you Cartesian coordinates

Scott (scott@vorthmann.org)
2018-08-31 17:45:04

From memory, granted

jrus (me@jacobrus.com)
2018-08-31 17:46:03

I'll send a picture

Scott (scott@vorthmann.org)
2018-08-31 17:46:12

I'll have to try your RYYR when I get home, since I don't have Mobile vZome yet

Scott (scott@vorthmann.org)
2018-08-31 17:46:20

Please do

jrus (me@jacobrus.com)
2018-08-31 17:46:26

vzome is not as satisfying as making physical models

jrus (me@jacobrus.com)
2018-08-31 17:46:42

and I'm not as good at figuring out what's going on

Scott (scott@vorthmann.org)
2018-08-31 17:47:00

Yes I know... And working it out yourself

jrus (me@jacobrus.com)
2018-08-31 17:49:21

so the radius is either blue-red or blue-yellow

jrus (me@jacobrus.com)
2018-08-31 17:49:31

no need for half anything

jrus (me@jacobrus.com)
2018-08-31 17:49:36

unless you want to stick to only blues

jrus (me@jacobrus.com)
2018-08-31 17:51:20

@Scott uploading two images here to slack

jrus (me@jacobrus.com)
2018-08-31 17:51:26

zome ball diameter

jrus (me@jacobrus.com)
2018-08-31 17:51:30

now slack knows where I live by examining the metadata

jrus (me@jacobrus.com)
2018-08-31 17:52:00

zome ball diameter 2

Scott (scott@vorthmann.org)
2018-08-31 17:53:44

Thx. Zome: it always works out

jrus (me@jacobrus.com)
2018-08-31 17:54:00

@Scott as soon as there's an easy vzome -> web pipeline I can make this kind of model and share a link that can be spun around etc. 🙂

Scott (scott@vorthmann.org)
2018-08-31 17:54:08

Y

Scott (scott@vorthmann.org)
2018-08-31 17:54:23

We can do that tonight

jrus (me@jacobrus.com)
2018-08-31 17:57:54

@Scott eventually I'd like to get the code for generating the shape geometry for rendering models into a browser

jrus (me@jacobrus.com)
2018-08-31 17:58:13

then anyone interested can see directly how it works without going to 2 placex

jrus (me@jacobrus.com)
2018-08-31 18:03:29

@Scott enjoy your driving

jrus (me@jacobrus.com)
2018-08-31 18:04:09

@Scott so what's a good baseline strut to consider to be length '1'? half the shortest strut zometool sells?

jrus (me@jacobrus.com)
2018-08-31 18:06:06

or the medium one maybe

jrus (me@jacobrus.com)
2018-08-31 18:06:54

personally I think it would be better for exposition if the middle length is considered '1', and then it is more obvious to readers/students that the size can also be reduced and the powers of phi can go negative

jrus (me@jacobrus.com)
2018-08-31 18:07:11

but that probably doesn't match convention as well w/r/t existing zometool stuff

jrus (me@jacobrus.com)
2018-08-31 18:08:33

did anyone ever 3d-print extra-short ("size 0"?) blue or yellow struts?

jrus (me@jacobrus.com)
2018-08-31 18:26:30

so okay, the radius of a large zomeball looks like either (φ²+1, φ³, 0), or (2φ², φ, 1)

jrus (me@jacobrus.com)
2018-08-31 18:29:05

the quadrance in either case is 2 + φ⁷

jrus (me@jacobrus.com)
2018-08-31 18:38:04

@Scott oh actually if the distance between the centers of two touching balls is 2, then we actually get some fractional coordinates for the ball shape vertices. ends up as (1, ½φ⁻, ½φ⁻²)

jrus (me@jacobrus.com)
2018-08-31 18:46:26

quadrance is (2φ⁻⁴ + φ³)/4

jrus (me@jacobrus.com)
2018-08-31 18:47:28

or maybe better to just say quadrance is (11/4) – φ

Scott (scott@vorthmann.org)
2018-08-31 18:57:55

just confirmed, balls touch at 2, yes

Scott (scott@vorthmann.org)
2018-08-31 18:59:10

You get to decide: nice coordinates for the ball and (most?) strut shapes, or nice coordinates for Zome models-as-vectors

Scott (scott@vorthmann.org)
2018-08-31 19:07:17

if you want to avoid rationals, probably need to go with the former

jrus (me@jacobrus.com)
2018-08-31 19:08:56

oh, the ball itself should have half-integer coordinates for sure

Scott (scott@vorthmann.org)
2018-08-31 19:09:13

trivial to accommodate scaling in the vZome export, or in the @jrus/** import

jrus (me@jacobrus.com)
2018-08-31 19:09:16

the centers of the ball should be some multiple of 2 apart along the blue axis etc.

Scott (scott@vorthmann.org)
2018-08-31 19:09:30

works for me

jrus (me@jacobrus.com)
2018-08-31 19:09:33

also, you only need to do the math for drawing a ball once

Scott (scott@vorthmann.org)
2018-08-31 19:09:39

yup

Scott (scott@vorthmann.org)
2018-08-31 19:09:54

and there are always other ball shapes possible

Scott (scott@vorthmann.org)
2018-08-31 19:10:01

if you're into that sort of thing

jrus (me@jacobrus.com)
2018-08-31 19:10:01

the question I would have is whether the zometool short blue strut should be length 2, or whether the touching balls should be length 2

jrus (me@jacobrus.com)
2018-08-31 19:10:34

I don't really care about other ball shapes for the moment. but maybe you care about those if you are saving arbitrary vzome stuff

Scott (scott@vorthmann.org)
2018-08-31 19:10:46

right. I wish (a little) that I had done the former... numbers would be less confusing to users who "show properties"

Scott (scott@vorthmann.org)
2018-08-31 19:10:59

and I already display lengths in terms of "orbit unit"

jrus (me@jacobrus.com)
2018-08-31 19:11:18

'orbit unit' = zometool lengths?

Scott (scott@vorthmann.org)
2018-08-31 19:11:34

== b1 for blue, r1 for red, etc.

jrus (me@jacobrus.com)
2018-08-31 19:11:40

basically your measurement times φ²?

Scott (scott@vorthmann.org)
2018-08-31 19:11:43

each orbit gets to define its own unit

jrus (me@jacobrus.com)
2018-08-31 19:11:46

sure

Scott (scott@vorthmann.org)
2018-08-31 19:12:25

I may be off by one... cubed I think

jrus (me@jacobrus.com)
2018-08-31 19:13:17

oh, so the short blue zometool strut is -1?

jrus (me@jacobrus.com)
2018-08-31 19:13:33

in 'orbit units'

Scott (scott@vorthmann.org)
2018-08-31 19:18:15

it is wonky

Scott (scott@vorthmann.org)
2018-08-31 19:19:03

I need to check

David Hall (david.42.hall@gmail.com)
2018-08-31 19:19:03

I haven't removed that restriction yet, though we discussed doing so. The related PR was just some prelim groundwork related to getNormal() that shouldn't change any existing behaviors, but I did have that change in mind. I wasn't going to work on removing that restriction until after you pull in the prelim PR.

Scott (scott@vorthmann.org)
2018-08-31 19:19:15

oh, right

David Hall (david.42.hall@gmail.com)
2018-08-31 19:19:38

... that is the restriction of the first 3 vertices being collinear.

David Hall (david.42.hall@gmail.com)
2018-08-31 19:20:22

which BTW, doesn't apply to VEF import (or clipboard paste).

Scott (scott@vorthmann.org)
2018-08-31 19:22:06

properties of the b1 strut in the +x direction

Scott (scott@vorthmann.org)
2018-08-31 19:22:29

length in orbit units: 1

Scott (scott@vorthmann.org)
2018-08-31 19:22:45

so the orbit unit for blue is a b1

Scott (scott@vorthmann.org)
2018-08-31 19:23:29

"prototype" is the canonical vector for the zone... but does not imply anything about strut lengths, it just defines direction

jrus (me@jacobrus.com)
2018-08-31 19:24:27

@Scott so that seems to be the zometool #1 strut

Scott (scott@vorthmann.org)
2018-08-31 19:24:35

yes, B1

Scott (scott@vorthmann.org)
2018-08-31 19:24:50

about 3 inches center to center

jrus (me@jacobrus.com)
2018-08-31 19:24:55

okay, so 'orbit units' are not based on the #0

Scott (scott@vorthmann.org)
2018-08-31 19:25:03

no

Scott (scott@vorthmann.org)
2018-08-31 19:25:15

like I said, wonky

jrus (me@jacobrus.com)
2018-08-31 19:25:43

personally I think it makes sense to call that one the "0" strut, but that disagrees with the little numbers printed on the physical struts

Scott (scott@vorthmann.org)
2018-08-31 19:25:52

in some cases it encodes a bit of history... I remember rescaling purple struts (the orbit unit) at some point around 2004

jrus (me@jacobrus.com)
2018-08-31 19:26:44

@Scott is there a canonical name for the different vertices, edges, faces of the zome ball? i.e. the different versions of each 'orbit'?

Scott (scott@vorthmann.org)
2018-08-31 19:26:59

yes and no.

jrus (me@jacobrus.com)
2018-08-31 19:27:08

does it make sense to try to teach readers some numbering / naming scheme?

jrus (me@jacobrus.com)
2018-08-31 19:27:18

or is that just a distraction

jrus (me@jacobrus.com)
2018-08-31 19:27:26

maybe it doesn't really help communication

Scott (scott@vorthmann.org)
2018-08-31 19:27:35

probably not, but that is said in the context of vZome, not a system where they see more of the code and coordinates

Scott (scott@vorthmann.org)
2018-08-31 19:27:45

as in not much sense

Scott (scott@vorthmann.org)
2018-08-31 19:28:15

but again, I'm re-evaluating many of my long-held positions, in light of the different requirements of Observable

Scott (scott@vorthmann.org)
2018-08-31 19:29:16

internally, vZome assigns indices 0-59, with some consistency (favoring certain rotations)

Scott (scott@vorthmann.org)
2018-08-31 19:30:03

the old Zomod names are somewhat arbitrary, but my Zomic language adopted that as a convention

Scott (scott@vorthmann.org)
2018-08-31 19:30:17

it works well enough until you get to chiral struts

Scott (scott@vorthmann.org)
2018-08-31 19:30:52

With Observable, I would happily create a notebook that explained either numbering scheme.

Scott (scott@vorthmann.org)
2018-08-31 19:31:34

I just don't know if you want to base anything on it. It seems you're kind of stuck with something, if you want to let people "build" with an API

Scott (scott@vorthmann.org)
2018-08-31 19:33:09

Remember your comment about "turtle graphics in SVG"? I've had thoughts about orientation relative directions in an API. I just don't think it would be very easy without a visual aid constantly in front of you. I built a couple of different "keys" for Zomod/Zomic to make the scripting even possible.

jrus (me@jacobrus.com)
2018-08-31 19:33:56

you can also just tell people some quaternion coordinates

David Hall (david.42.hall@gmail.com)
2018-08-31 19:35:48

That sound like fun... a quaternion based zomic turtle API 😉

Scott (scott@vorthmann.org)
2018-08-31 19:37:35

fun to build, sure... hell to use 😉

jrus (me@jacobrus.com)
2018-08-31 19:37:49

why?

Scott (scott@vorthmann.org)
2018-08-31 19:37:56

see #general for the best version of the orbit key

David Hall (david.42.hall@gmail.com)
2018-08-31 19:37:57

fer sher

jrus (me@jacobrus.com)
2018-08-31 19:38:23

the names would be meaningful

Scott (scott@vorthmann.org)
2018-08-31 19:39:02

but how to you remember orientation? Easy for a computer, hard for a person unless they have the model building in front of their eyes

Scott (scott@vorthmann.org)
2018-08-31 19:39:07

actually that does sound like fun

Scott (scott@vorthmann.org)
2018-08-31 19:39:19

a Zomic "debugger" 😉

Scott (scott@vorthmann.org)
2018-08-31 19:40:15

but by that time, you might as well use a direct-manipulation UI and simply record a script

David Hall (david.42.hall@gmail.com)
2018-08-31 19:43:14

Maybe a flight simulator paradigm... fly the turtle around and optionally leave a strut in your wake.

jrus (me@jacobrus.com)
2018-08-31 19:43:22

@Scott but anyway, leaving aside quaternions for the moment, it's pretty convenient now to have the code written that I can say:

${deduplicate(icosahedral_symmetry([[1,0,1], [-1,1,2], [2,-1,2]])).map(vprint)}

to get all of the vertices of the zomeball

David Hall (david.42.hall@gmail.com)
2018-08-31 19:43:27

pitch, roll, yaw...

Scott (scott@vorthmann.org)
2018-08-31 19:43:45

yes, I'm looking forward to it

jrus (me@jacobrus.com)
2018-08-31 19:44:09

@David Hall euler angles suck

Scott (scott@vorthmann.org)
2018-08-31 19:44:11

and even more, looking forward to the next step, when you want to build two connected struts then apply symmetry

David Hall (david.42.hall@gmail.com)
2018-08-31 19:44:32

LOL

jrus (me@jacobrus.com)
2018-08-31 19:44:43

no seriously, they are very difficult to reason about

jrus (me@jacobrus.com)
2018-08-31 19:45:07

they involve a bunch of bullshit with 'angle measure

jrus (me@jacobrus.com)
2018-08-31 19:45:14

which is frankly always pretty terrible

jrus (me@jacobrus.com)
2018-08-31 19:45:23

or maybe not always

jrus (me@jacobrus.com)
2018-08-31 19:45:25

but often

jrus (me@jacobrus.com)
2018-08-31 19:45:29

angle measure is the logarithm of a rotation

jrus (me@jacobrus.com)
2018-08-31 19:45:39

sometimes it is convenient to work in log space

David Hall (david.42.hall@gmail.com)
2018-08-31 19:46:43

I know. I was just messing with y'all. I'd prefer quaternions, if for no other reason than to avoid gimbal lock

Scott (scott@vorthmann.org)
2018-08-31 19:48:02

I'm going to keep quiet, @jrus, and see what you come up with as a symbolic representation of strut building. Fortunately, we can always fall back on vector addition... but designing (and naming) vectors is the hard part

jrus (me@jacobrus.com)
2018-08-31 19:48:45

@Scott my plan was to just directly specify coordinates of endpoint vertices 🙂

jrus (me@jacobrus.com)
2018-08-31 19:49:00

I was just curious what conventions existed

jrus (me@jacobrus.com)
2018-08-31 19:49:08

we could pretty easily translate from whatever existing system

Scott (scott@vorthmann.org)
2018-08-31 19:49:11

let's go with that for now

jrus (me@jacobrus.com)
2018-08-31 19:49:39

who decided the numbers for that zomekey thing?

Scott (scott@vorthmann.org)
2018-08-31 19:50:01

Will Ackel

Scott (scott@vorthmann.org)
2018-08-31 19:50:09

See the Zomod manual

jrus (me@jacobrus.com)
2018-08-31 19:50:11

oh gotcha

Scott (scott@vorthmann.org)
2018-08-31 19:50:37

red names are reasonable, but I never did memorize the relationship between red, yellow, and blue names

jrus (me@jacobrus.com)
2018-08-31 19:50:47

they don't have a direct relationship

jrus (me@jacobrus.com)
2018-08-31 19:50:59

they're just separately numbered in rings starting at red poles

Scott (scott@vorthmann.org)
2018-08-31 19:51:56

oh, right... the red rotation is the core principle. I did a little better in my icosahedral orbit numbers, just so I could code them

jrus (me@jacobrus.com)
2018-08-31 19:52:16

I think it makes sense to start with blue axes

Scott (scott@vorthmann.org)
2018-08-31 19:52:18

there should be another PDF for that key, but I'm not sure where

Scott (scott@vorthmann.org)
2018-08-31 19:52:33

that's what I did... 0=x, 1=y, 2=z

jrus (me@jacobrus.com)
2018-08-31 19:52:47

for example, can number the octants, and then each red strut is at the intersection between two octants

Scott (scott@vorthmann.org)
2018-08-31 19:52:56

then a rotation around (1,1,1) I think

Scott (scott@vorthmann.org)
2018-08-31 19:53:00

then a 5-fold

jrus (me@jacobrus.com)
2018-08-31 19:53:05

each yellow strut is either in 2 octants or is only in one

David Hall (david.42.hall@gmail.com)
2018-08-31 19:53:09

or enable trackball.showIcosahedralLabels

Scott (scott@vorthmann.org)
2018-08-31 19:53:27

I wouldn't mind your reinventing vZome, if you weren't doing it better! 😉

Scott (scott@vorthmann.org)
2018-08-31 19:54:57

I wanted consecutive indices... I don't number strut orbits, I number the orbits of the symmetry group.

Scott (scott@vorthmann.org)
2018-08-31 19:55:07

Then a given yellow strut has three aliases

Scott (scott@vorthmann.org)
2018-08-31 19:55:12

for example

jrus (me@jacobrus.com)
2018-08-31 19:55:18

I don't quite know what that means

jrus (me@jacobrus.com)
2018-08-31 19:55:25

oh I see

jrus (me@jacobrus.com)
2018-08-31 19:55:37

you number icosahedral symmetry faces

Scott (scott@vorthmann.org)
2018-08-31 19:55:58

yes

Scott (scott@vorthmann.org)
2018-08-31 19:56:12

yellow 9, 10, 11 all have coordinates (1,1,1) (up to scale)

jrus (me@jacobrus.com)
2018-08-31 19:56:34

so what do you do with reflections?

Scott (scott@vorthmann.org)
2018-08-31 19:56:42

oh, that's a fun topic

jrus (me@jacobrus.com)
2018-08-31 19:56:48

if you have 60 symmetries then your fundamental shape is a kite

jrus (me@jacobrus.com)
2018-08-31 19:56:53

rather than a triangle

jrus (me@jacobrus.com)
2018-08-31 19:57:08

or maybe a twice-as-big triangle

Scott (scott@vorthmann.org)
2018-08-31 19:57:43

for non-chiral orbits, you simply use a sign bit (even for zero), and it means "negate all coordinates"

jrus (me@jacobrus.com)
2018-08-31 19:58:01

ah

Scott (scott@vorthmann.org)
2018-08-31 19:58:22

for chiral orbits, that works when the symmetry group supports the triple reflection (central inversion),

Scott (scott@vorthmann.org)
2018-08-31 19:58:32

but breaks down for symmetry groups that don't

jrus (me@jacobrus.com)
2018-08-31 19:58:35

you could also just negate one coordinate, and draw a triangle under gnomonic projection that is double your picture in vzome

Scott (scott@vorthmann.org)
2018-08-31 19:58:49

we only found that out recently

jrus (me@jacobrus.com)
2018-08-31 19:58:59

what symmetry groups are you considering?

jrus (me@jacobrus.com)
2018-08-31 19:59:05

is this 3-dimensional?

Scott (scott@vorthmann.org)
2018-08-31 19:59:10

yes

Scott (scott@vorthmann.org)
2018-08-31 19:59:27

octahedral, tetrahedral, N-sided antiprism

Scott (scott@vorthmann.org)
2018-08-31 20:00:01

it is not all algorithmic yet

jrus (me@jacobrus.com)
2018-08-31 20:00:30

one that I would be interested to see how you'd deal with is the 24-cell

Scott (scott@vorthmann.org)
2018-08-31 20:00:50

in what sense? how it is generated?

jrus (me@jacobrus.com)
2018-08-31 20:01:12

https://en.wikipedia.org/wiki/24-cell

} Wikipedia (https://en.wikipedia.org/)
Scott (scott@vorthmann.org)
2018-08-31 20:01:28

yes, we know what it is

Scott (scott@vorthmann.org)
2018-08-31 20:01:45

we can generate any member of its family of Wythoff symbols

Scott (scott@vorthmann.org)
2018-08-31 20:02:38

Brian Hall gave me a recipe in terms of a root system and quaternions... I use it for B4/C4/D4/F4 groups

jrus (me@jacobrus.com)
2018-08-31 20:02:42

I find it very interesting as 4-dimensional shape. the 4-d shapes with 5-fold symmetries are even more too much for my brain

Scott (scott@vorthmann.org)
2018-08-31 20:02:45

I think A4 and H4 are different implementations

jrus (me@jacobrus.com)
2018-08-31 20:03:18

the 24 cell is what you get if you make a voronoi diagram out of hurwitz quaternions

jrus (me@jacobrus.com)
2018-08-31 20:03:37

where "hurwitz quaternion" just means you have either all integer or all half-integer coordinates

Scott (scott@vorthmann.org)
2018-08-31 20:03:50

that's one of those facts I can never remember

jrus (me@jacobrus.com)
2018-08-31 20:04:27

so you just take 2 copies of an integer lattice, and offset one in every dimension

Scott (scott@vorthmann.org)
2018-08-31 20:04:42

4D polytope generation is another thing that would fit better in an Observable notebook than it does in vZome, in a sense

jrus (me@jacobrus.com)
2018-08-31 20:04:47

and "miraculously" 4(1/2)^2 = 1

jrus (me@jacobrus.com)
2018-08-31 20:05:33

I wish I understood more about the geometry

Scott (scott@vorthmann.org)
2018-08-31 20:05:47

don't we all

jrus (me@jacobrus.com)
2018-08-31 20:05:57

I think there are a lot of mysteries in these 4-d shapes that are not very well understood, either formally or intuitively

jrus (me@jacobrus.com)
2018-08-31 20:06:21

but I admit I am far from an expert, and there are certainly some mathematicians who know a lot about them

Scott (scott@vorthmann.org)
2018-08-31 20:06:53

I would agree. They also attract crackpots... those "mysteries" include brain function, crystal power, etc...

jrus (me@jacobrus.com)
2018-08-31 20:06:59

lol

Scott (scott@vorthmann.org)
2018-08-31 20:07:36

make a notebook about the 24-cell, and you'll get some of those people drawn in 😉

David Hall (david.42.hall@gmail.com)
2018-08-31 20:07:57

It might be interesting to manipulate 4D in the UI, using the trackball for 3d and a wheel (on screen or the mouse wheel) for rotating the 4th dimension

Scott (scott@vorthmann.org)
2018-08-31 20:08:35

one control I'm really missing: drag the 4D vertex (or vertices!) to be used in generating a 4D polytope

Scott (scott@vorthmann.org)
2018-08-31 20:09:26

moving a point around on the 3-sphere, within a hyper-spherical triangular reflection domain, while snapping to golden number coordinates

Scott (scott@vorthmann.org)
2018-08-31 20:09:59

the equivalent on the 2-sphere would be the place to start, of course

Scott (scott@vorthmann.org)
2018-08-31 20:10:05

to generate dodecahedra, etc

David Hall (david.42.hall@gmail.com)
2018-08-31 20:10:06

Yeah, I wasn't thinking about editing 4D, just viewing.

jrus (me@jacobrus.com)
2018-08-31 20:10:31

oh you folks might enjoy the latest 3blue1brown video (not public yet)

Scott (scott@vorthmann.org)
2018-08-31 20:10:48

yes, even viewing is tricky if you want to snap to golden vectors

jrus (me@jacobrus.com)
2018-08-31 20:10:59

https://www.youtube.com/watch?v=MIXK0ovxzC4

YouTube
} 3Blue1BrownHidden (https://www.youtube.com/channel/UCamFoVzJqGZBciwNKKTTvGg)
David Hall (david.42.hall@gmail.com)
2018-08-31 20:11:00

He's one of the best around.

jrus (me@jacobrus.com)
2018-08-31 20:11:26

I have intended to make some related(ish) interactive demos explaining quaternion rotation for a while

David Hall (david.42.hall@gmail.com)
2018-08-31 20:11:39

Cool. I heard him mention that this is coming soon...

Scott (scott@vorthmann.org)
2018-08-31 20:12:00

I really envy his productivity and creativity... great stuff

Scott (scott@vorthmann.org)
2018-08-31 20:12:15

he has good tools!

jrus (me@jacobrus.com)
2018-08-31 20:13:09

anyway, trying to make a usable visual for 3d rotations (ideally practically useful when rotating models, or if making a 3d turtle graphics thingy or whatever) is a neat problem

jrus (me@jacobrus.com)
2018-08-31 20:13:18

there are a few nice views

jrus (me@jacobrus.com)
2018-08-31 20:14:02

a stereographic projection of quaternions onto space (and then showing points within a ball) is one nice one

jrus (me@jacobrus.com)
2018-08-31 20:14:41

another view is to show a little arrow pointing along a great circle arc, and slowly spinning around the sphere

jrus (me@jacobrus.com)
2018-08-31 20:14:53

where the length of the arrow is the amount of rotation

jrus (me@jacobrus.com)
2018-08-31 20:15:11

what I want to explain is how quaternions compose, in some kind of visual/intuitive way

Scott (scott@vorthmann.org)
2018-08-31 20:15:18

sorry, I'm watching the video

jrus (me@jacobrus.com)
2018-08-31 20:15:18

I don't really think this can be done well as a video

jrus (me@jacobrus.com)
2018-08-31 20:15:24

interaction too important

jrus (me@jacobrus.com)
2018-08-31 20:15:40

anyway, we're going to go walk the dog around the block etc. might be out for an hour or something

David Hall (david.42.hall@gmail.com)
2018-08-31 20:15:43

that would be a great topic

Scott (scott@vorthmann.org)
2018-08-31 20:15:52

have a nice walk

David Hall (david.42.hall@gmail.com)
2018-08-31 20:16:11

I'm going to watch the video then go to bed myself.

David Hall (david.42.hall@gmail.com)
2018-08-31 20:16:14

g'nite all

Scott (scott@vorthmann.org)
2018-08-31 20:16:28

gnite

jrus (me@jacobrus.com)
2018-08-31 21:28:59

alright, I ate more food than I needed to

Scott (scott@vorthmann.org)
2018-08-31 21:48:40

I'm struggling with the three.js import... can you help?

jrus (me@jacobrus.com)
2018-08-31 21:50:43

possibly

jrus (me@jacobrus.com)
2018-08-31 21:50:45

I can try anyway

jrus (me@jacobrus.com)
2018-08-31 22:23:38

okay, glad it works (maybe)

Scott (scott@vorthmann.org)
2018-08-31 22:37:56

I'm just missing controls.update() inside a render function... but Mike's example for OrbitControls doesn't seem to need a render function calling requestAnimationFrame, and his basic Three.js demo just has a while loop for animating

jrus (me@jacobrus.com)
2018-08-31 22:38:08

gotcha

Scott (scott@vorthmann.org)
2018-08-31 22:38:13

I can do this... it has just been a while

jrus (me@jacobrus.com)
2018-08-31 22:38:43

I'm wasting time reading documentation that I don't need to read right now. I might just go read a book or something

Scott (scott@vorthmann.org)
2018-08-31 22:40:52

requestAnimationFrame is global, so that mechanism won't work... I need to read the notebook about timers etc.

jrus (me@jacobrus.com)
2018-08-31 22:41:12

you can use requestanimationframe if you want, but it's not the most idiomatic

Scott (scott@vorthmann.org)
2018-08-31 22:41:30

OK... well it is not working, so I'll try the more native idioms

Scott (scott@vorthmann.org)
2018-08-31 22:44:51

yup, read it... now wondering how to fit it into my function

Scott (scott@vorthmann.org)
2018-08-31 23:31:49

OK, I got it to work after a fashion. See the text:

Scott (scott@vorthmann.org)
2018-08-31 23:34:03

It only works when the domElement is allowed to default in the trackball. I'll debug further tomorrow. The code seems quite a bit too complicated for what it is doing.

Scott (scott@vorthmann.org)
2018-08-31 23:34:40

I ended up with requestAnimationFrame... I didn't see how to make 'yield' work

Scott (scott@vorthmann.org)
2018-09-01 11:02:27

good morning @jrus

Scott (scott@vorthmann.org)
2018-09-01 11:02:43

I've been re-reading about promises, generators, etc.

Scott (scott@vorthmann.org)
2018-09-01 11:03:06

now I have a work escalation... our big user conf is next week, and everyone is making demos and finding problems, of course

Scott (scott@vorthmann.org)
2018-09-01 11:03:10

!@#$%^&

jrus (me@jacobrus.com)
2018-09-01 11:03:36

@Scott I'll take a look

jrus (me@jacobrus.com)
2018-09-01 11:03:36

wait, what happened to the chat history. all I see is gray boxes, the word 'today', and my comment

jrus (me@jacobrus.com)
2018-09-01 11:03:37

there's a lot of stuff to learn; I don't really feel competent in that part of JS

jrus (me@jacobrus.com)
2018-09-01 11:03:46

oh weird, the chat history all appeared again

Scott (scott@vorthmann.org)
2018-09-01 11:03:55

chat history should be there... don't know

Scott (scott@vorthmann.org)
2018-09-01 11:04:16

oh, we have a free account here, so there is loss... but it should not be asymmetric

Scott (scott@vorthmann.org)
2018-09-01 11:04:34

I've kept my browser tab open though... if you stopped the app, it may be lost for you

jrus (me@jacobrus.com)
2018-09-01 11:04:36

somehow it decided that it needed to reload the content from the server or something

jrus (me@jacobrus.com)
2018-09-01 11:05:06

in the mean time it hid all the text that was previously there and replaced it with gray boxes

jrus (me@jacobrus.com)
2018-09-01 11:05:18

but now it's back

Scott (scott@vorthmann.org)
2018-09-01 11:05:34

oh good

Scott (scott@vorthmann.org)
2018-09-01 11:05:48

now, off to my other account... see you later

jrus (me@jacobrus.com)
2018-09-01 11:05:54

cheers

jrus (me@jacobrus.com)
2018-09-01 11:17:43

big zomeball

Scott (scott@vorthmann.org)
2018-09-01 11:28:46

ah... you want an export?

Scott (scott@vorthmann.org)
2018-09-01 11:29:16

oh, this is a "capture" of your physical model

jrus (me@jacobrus.com)
2018-09-01 11:29:27

something like that

Scott (scott@vorthmann.org)
2018-09-01 11:31:19

work issue on hold... probably resolved

jrus (me@jacobrus.com)
2018-09-01 11:39:36

it's not entirely obvious what the right way is to construct a "lifelike" zome ball. here's one alternate idea

jrus (me@jacobrus.com)
2018-09-01 11:39:44

anyway, playground time

jrus (me@jacobrus.com)
2018-09-01 11:39:45

ttyl

Scott (scott@vorthmann.org)
2018-09-01 11:39:52

later

Scott (scott@vorthmann.org)
2018-09-01 11:40:08

I'll share my model... the one used in vZome

Scott (scott@vorthmann.org)
2018-09-01 11:48:49

The model used in vZome. This is an import of a VEF export, so you cannot "undo" and see how it was built, but you can hide panels to understand the geometry.

Scott (scott@vorthmann.org)
2018-09-01 13:48:23

My first "intentional" publish

Scott (scott@vorthmann.org)
2018-09-01 13:52:57

@jrus to understand how to drag in a cell, I cloned MB's notebook: https://beta.observablehq.com/d/e1e6bd2c546879ce

jrus (me@jacobrus.com)
2018-09-01 15:12:10

@Scott chamfered edges? wow

jrus (me@jacobrus.com)
2018-09-01 15:14:47

I guess that's how real zome balls are roughly

jrus (me@jacobrus.com)
2018-09-01 15:15:25

I don't think the dimensions are quite identical, but yours might better match zome geometry

jrus (me@jacobrus.com)
2018-09-01 15:16:02

then again, I am just visually inspecting, not measuring. hard to be sure.

jrus (me@jacobrus.com)
2018-09-01 15:23:13

@Scott when you make shapes for physical 3D printing, how much do you have to tweak the geometry of the connectors?

jrus (me@jacobrus.com)
2018-09-01 15:32:31

@Scott not sure if I linked this precise page http://www.rawbw.com/~davidm/zome/

jrus (me@jacobrus.com)
2018-09-01 15:32:36

or just a subpage

jrus (me@jacobrus.com)
2018-09-01 15:32:42

but anyway that also has a naming scheme

jrus (me@jacobrus.com)
2018-09-01 15:32:46

for the different directions

Scott (scott@vorthmann.org)
2018-09-01 15:39:15

they look wrong without the chamfers

Scott (scott@vorthmann.org)
2018-09-01 15:39:37

the real chamfers are rounds, I think, with the modern ball mold

Scott (scott@vorthmann.org)
2018-09-01 15:40:54

My 3D-printed struts use a standard size basis given by Paul... .700 in plus some shrinkage, maybe .698 in... as the ball blue diameter, if I recall correctly

Scott (scott@vorthmann.org)
2018-09-01 15:41:18

yes, I saw DM's naming scheme, briefly

Scott (scott@vorthmann.org)
2018-09-01 15:41:41

OK, gotta bounce back to the work account... now two issues in flight

jrus (me@jacobrus.com)
2018-09-01 15:41:49

cheers

jrus (me@jacobrus.com)
2018-09-01 15:43:19

btw, one other naming scheme for orbits could do a gnomonic projection onto the perpendicular-to-red plane, and then use natural number coordinates representing displacements along the 5 5th roots of unity

jrus (me@jacobrus.com)
2018-09-01 15:43:35

instead of doing a gnomonic projection onto a perpendicular-to-blue plane

jrus (me@jacobrus.com)
2018-09-01 16:50:46

oh wow, Simon is able to put some zometool shapes together

jrus (me@jacobrus.com)
2018-09-01 16:51:07

I was expecting him to not really have enough hand eye coordination for another 6 months at least

jrus (me@jacobrus.com)
2018-09-01 16:51:17

but with some help he can make a cube

Scott (scott@vorthmann.org)
2018-09-01 17:45:44

Wow indeed!

Scott (scott@vorthmann.org)
2018-09-01 17:47:39

I guess it is like a much smaller version of the baby toys... Square block in square hole etc

Scott (scott@vorthmann.org)
2018-09-01 17:47:57

Though plenty of adults have trouble!

jrus (me@jacobrus.com)
2018-09-01 18:26:34

@Scott we haven't tried other colors of struts yet. we'll see if he can figure out the green ones before 3

jrus (me@jacobrus.com)
2018-09-01 18:27:46

we've done some playing with tinker toys. I think the blue zometool struts might be easier than those, just based on how much strength it takes to push them in

jrus (me@jacobrus.com)
2018-09-01 19:34:54

@Scott so if you have 'copy' implemented, are you going to also add 'paste'?

Scott (scott@vorthmann.org)
2018-09-01 19:51:19

there is already paste, but only for VEF format (which is what you get with copy)

Scott (scott@vorthmann.org)
2018-09-01 19:51:48

you have to have a ball selected to paste, as the "relative origin"

jrus (me@jacobrus.com)
2018-09-01 20:30:21

ah gotcha

jrus (me@jacobrus.com)
2018-09-01 20:30:23

nice

Scott (scott@vorthmann.org)
2018-09-02 10:47:53

I'm nearly ready with a JSON dump of any "rendering style" in vZome. I already have the JSON for any symmetry, any field... orientations, permutations, orbits.

jrus (me@jacobrus.com)
2018-09-02 14:59:49

nice!

Scott (scott@vorthmann.org)
2018-09-02 15:01:50

well, getting there... I'm having a little trouble controlling the JSON serialization

Scott (scott@vorthmann.org)
2018-09-02 15:02:14

the annotations and APIs are rich and not well-documented

Scott (scott@vorthmann.org)
2018-09-02 15:37:42
Scott (scott@vorthmann.org)
2018-09-02 15:39:02

This is the default style from vZome. When I first defined the JSON format, I decided I didn't want to make integer coordinates complicated by the possibility rational coordinates... this was back in May, working with my friend doing AR

Scott (scott@vorthmann.org)
2018-09-02 15:39:12

but I don't think I like it now

Scott (scott@vorthmann.org)
2018-09-03 14:07:56

Observable question: when I import from another notebook, I get local instantiations of any cells I transitively depend on, right?

Scott (scott@vorthmann.org)
2018-09-03 14:13:38

Perhaps not. It talks about "live bindings" : https://beta.observablehq.com/@mbostock/introduction-to-imports

Scott (scott@vorthmann.org)
2018-09-03 14:21:15

No, I don't think he is trying to say that imports share state across notebooks.

jrus (me@jacobrus.com)
2018-09-03 17:18:29

howdy

jrus (me@jacobrus.com)
2018-09-03 17:19:37

@Scott any cells in the dependency graph will get used, but you shouldn't see their names unless you ask for them, as far as I understand

jrus (me@jacobrus.com)
2018-09-03 17:20:25

@Scott what my code was doing was just taking an optional third parameter for the denominator

Scott (scott@vorthmann.org)
2018-09-03 17:20:51

yes, I looked again at yours

jrus (me@jacobrus.com)
2018-09-03 17:21:23

so if you want just an integer you can write it as [1], if you want a 'golden integer' you can write φ as [0, 1], or if you want a rational number you can write it (2 + φ)/3 as [2, 1, 3]

jrus (me@jacobrus.com)
2018-09-03 17:21:32

but you could do it some other way...

Scott (scott@vorthmann.org)
2018-09-03 17:21:33

yes

jrus (me@jacobrus.com)
2018-09-03 17:21:44

you could also just use unicode and parse it

jrus (me@jacobrus.com)
2018-09-03 17:21:58

e.g. write 2+φ/3

Scott (scott@vorthmann.org)
2018-09-03 17:22:00

and for a field of order N, the rational form can always use N+1 integers

jrus (me@jacobrus.com)
2018-09-03 17:22:35

or come up with some other format, e.g. 2φ1/3

jrus (me@jacobrus.com)
2018-09-03 17:23:17

whatever you think is expressive enough, reasonably legible, reasonably concise, etc.

Scott (scott@vorthmann.org)
2018-09-03 17:23:27

I prefer not parsing, so the format is not limited golden, or limited to order 2 fields

jrus (me@jacobrus.com)
2018-09-03 17:23:51

it's not hard to add another format for some other field, etc.

Scott (scott@vorthmann.org)
2018-09-03 17:23:53

again, my focus is to make sure I'm never too far from rendering any vZome file

jrus (me@jacobrus.com)
2018-09-03 17:24:02

but sure

jrus (me@jacobrus.com)
2018-09-03 17:24:36

if you want other fields maybe you want the denominator listed up front

jrus (me@jacobrus.com)
2018-09-03 17:24:43

dunno...

Scott (scott@vorthmann.org)
2018-09-03 17:24:59

as long as I know the order, it is not necessary, I think

Scott (scott@vorthmann.org)
2018-09-03 17:25:27

I can now export JSON for shapes, either with floats or with algebraic numbers

jrus (me@jacobrus.com)
2018-09-03 17:25:31

nice

Scott (scott@vorthmann.org)
2018-09-03 17:25:38

but still using strings for fractions

jrus (me@jacobrus.com)
2018-09-03 17:25:52

I recommend making just one denominator

jrus (me@jacobrus.com)
2018-09-03 17:26:00

but maybe that's not how vzome works internally

jrus (me@jacobrus.com)
2018-09-03 17:26:02

dunno..

Scott (scott@vorthmann.org)
2018-09-03 17:26:15

yes, I like that... originally I did that too, but I don't remember why I backed away

Scott (scott@vorthmann.org)
2018-09-03 17:26:30

internally vZome uses BigRational for every factor

Scott (scott@vorthmann.org)
2018-09-03 17:26:45

so I'll have to do a bit of arithmetic to export

jrus (me@jacobrus.com)
2018-09-03 17:26:48

and bigrational doesn't support proportions of 3 integers?

Scott (scott@vorthmann.org)
2018-09-03 17:27:12

no, it is just numerator, denominator

jrus (me@jacobrus.com)
2018-09-03 17:27:48

how does the bigrational performance compare to just using bigintegers in your own "golden rational" type?

jrus (me@jacobrus.com)
2018-09-03 17:28:07

probably comparable

jrus (me@jacobrus.com)
2018-09-03 17:28:25

maybe this one makes it simpler if you let the existing code handle division etc.

Scott (scott@vorthmann.org)
2018-09-03 17:28:30

so (2+φ)/3 is [ 2/3, 1/3 ]

jrus (me@jacobrus.com)
2018-09-03 17:28:40

right

jrus (me@jacobrus.com)
2018-09-03 17:29:06

handling inverting of a golden rational number is still a pain

Scott (scott@vorthmann.org)
2018-09-03 17:29:13

yes

Scott (scott@vorthmann.org)
2018-09-03 17:30:22

so I've dropped the Java work for a bit, to focus on how I'll deal with these shape-sets in the Javascript

jrus (me@jacobrus.com)
2018-09-03 17:31:05

make whatever interchange format you want

jrus (me@jacobrus.com)
2018-09-03 17:31:17

we can easily interpret it in JS

jrus (me@jacobrus.com)
2018-09-03 17:31:37

it's no more than a fes lines of code to handle any of these formats

jrus (me@jacobrus.com)
2018-09-03 17:31:39

**few

jrus (me@jacobrus.com)
2018-09-03 17:31:53

whatever is most convenient for vzome is fine

Scott (scott@vorthmann.org)
2018-09-03 17:32:03

I asked about imports because I think any "renderer" can have its own cache of geometries, only creating those needed to render a single model

jrus (me@jacobrus.com)
2018-09-03 17:32:20

I'm not sure what you mean

jrus (me@jacobrus.com)
2018-09-03 17:32:27

what is a "renderer"?

Scott (scott@vorthmann.org)
2018-09-03 17:32:39

a function like vZomeRenderer

Scott (scott@vorthmann.org)
2018-09-03 17:32:52

that produces a canvas directly, given a model JSON

jrus (me@jacobrus.com)
2018-09-03 17:33:24

I don't really understand what the question is. you can put the "cache of geometries" in the same notebook as the "renderer"

jrus (me@jacobrus.com)
2018-09-03 17:33:31

or you can import it from a different notebook

jrus (me@jacobrus.com)
2018-09-03 17:33:40

or from a gist or whatever

Scott (scott@vorthmann.org)
2018-09-03 17:35:08

The issue is one of open-endedness... each different length of a given orbit needs its own Geometry in three.js terms. If I precompute some fixed set, it will necessarily leave out an infinite number of possibilities, like a strut 2/3 in length, etc.

Scott (scott@vorthmann.org)
2018-09-03 17:35:35

So some models will always need to dynamically generate Geometry objects from a recipe, either generic or per orbit

jrus (me@jacobrus.com)
2018-09-03 17:35:54

sounds fine

Scott (scott@vorthmann.org)
2018-09-03 17:36:07

vZome handles this as I mentioned before, by having a shape "recipe". This is what I'm exporting.

jrus (me@jacobrus.com)
2018-09-03 17:36:08

I think you can write the "geometries" as recipes

Scott (scott@vorthmann.org)
2018-09-03 17:36:30

sure, but they need to be resolved by the time I give them to three.js

jrus (me@jacobrus.com)
2018-09-03 17:36:35

that's no problem

Scott (scott@vorthmann.org)
2018-09-03 17:36:36

one sec

Scott (scott@vorthmann.org)
2018-09-03 17:36:59

no, just a bit of coding... which is what I'm doing

jrus (me@jacobrus.com)
2018-09-03 17:37:36

I can help you with that if you want. though maybe you want to make a separate library instead of using my little hacky-prototypes-in-a-notebook code

Scott (scott@vorthmann.org)
2018-09-03 17:37:56

Here is the vZome StrutGeometry for the orange icosahedral orbit, for example.

Scott (scott@vorthmann.org)
2018-09-03 17:38:21

I can also generate without the floats

jrus (me@jacobrus.com)
2018-09-03 17:39:16

if you do it without the floats you will save space, make it more comprehensible, and not add perceptibly much computation time to your notebook

Scott (scott@vorthmann.org)
2018-09-03 17:39:24

yes, that is my intent

jrus (me@jacobrus.com)
2018-09-03 17:39:26

but either way is fine

Scott (scott@vorthmann.org)
2018-09-03 17:39:59

and I don't get to control precision of the floats, with the JSON library I'm using, which is annoying

jrus (me@jacobrus.com)
2018-09-03 17:40:24

you mean it is more precise than you need, wasting bandwidth?

Scott (scott@vorthmann.org)
2018-09-03 17:40:51

as you said, who needs the least-significant 10 digits?

Scott (scott@vorthmann.org)
2018-09-03 17:41:21

it is not the bandwidth, it is the readability 😉

Scott (scott@vorthmann.org)
2018-09-03 17:41:41

but I'll use rationals in any case

Scott (scott@vorthmann.org)
2018-09-03 17:42:31
jrus (me@jacobrus.com)
2018-09-03 17:42:40

cool

Scott (scott@vorthmann.org)
2018-09-03 17:42:58

of course, the "readability" is debatable too

jrus (me@jacobrus.com)
2018-09-03 17:42:59

you can also if you want make each of your fractions into two numbers in the list

Scott (scott@vorthmann.org)
2018-09-03 17:43:25

yes, I could... but I like the one-denominator approach, so I'll figure that out

Scott (scott@vorthmann.org)
2018-09-03 17:43:30

not hard, of course

jrus (me@jacobrus.com)
2018-09-03 17:44:25

what I like about the one-denominator version is it makes it clear how big you need to make an integer-coordinate version

jrus (me@jacobrus.com)
2018-09-03 17:44:38

i.e. if you want to scale it up

Scott (scott@vorthmann.org)
2018-09-03 17:44:53

I suppose Javascript and JSON would allow wacky things like [ 2, 5, { "divisor" : 3 } ]

jrus (me@jacobrus.com)
2018-09-03 17:44:54

also I found most of the time the denominator was the same

jrus (me@jacobrus.com)
2018-09-03 17:45:04

it would allow it, but I wouldn't recommend it

Scott (scott@vorthmann.org)
2018-09-03 17:45:08

lol

jrus (me@jacobrus.com)
2018-09-03 17:45:33

["2/3", "5/3"] is better

Scott (scott@vorthmann.org)
2018-09-03 17:45:48

ha

Scott (scott@vorthmann.org)
2018-09-03 17:47:54

I was also trying to toggle between triangulated faces and just polygons, but I think I prefer just polygons

Scott (scott@vorthmann.org)
2018-09-03 17:48:43

easy to make code smart on that one. Only the naive default Geometry requires triangular faces... as soon as you do BufferedGeometry you have more freedom

jrus (me@jacobrus.com)
2018-09-03 17:48:48

i.e. triangulate them yourself

Scott (scott@vorthmann.org)
2018-09-03 17:48:52

yes

jrus (me@jacobrus.com)
2018-09-03 17:49:14

BufferedGeometry is a 3JS thing?

Scott (scott@vorthmann.org)
2018-09-03 17:49:33

yes, the whole send-arrays-to-the-GPU thing

Scott (scott@vorthmann.org)
2018-09-03 17:49:40

not something to worry about yet

Scott (scott@vorthmann.org)
2018-09-03 17:58:39

getting organized in a new fork: https://beta.observablehq.com/d/b1cf328eed466d17

jrus (me@jacobrus.com)
2018-09-03 17:58:56

@Scott are there any parts you want help with?

Scott (scott@vorthmann.org)
2018-09-03 17:59:20

sure... give me a moment

Scott (scott@vorthmann.org)
2018-09-03 18:00:15

how do I copy a link for a notebook cell?

Scott (scott@vorthmann.org)
2018-09-03 18:00:35

nm, I see it

Scott (scott@vorthmann.org)
2018-09-03 18:01:37

I need one that operates on a single shape like the JSON I just sent you

Scott (scott@vorthmann.org)
2018-09-03 18:02:03

assume rationals are in one-divisor form, like yours

Scott (scott@vorthmann.org)
2018-09-03 18:03:30

here's the thing: the shape is given for only the prototype vector, but it has to "stretch" for other vectors in the orbit

Scott (scott@vorthmann.org)
2018-09-03 18:04:06

logically, the createGeometry() function would take a length rational, but that means lots of division

Scott (scott@vorthmann.org)
2018-09-03 18:04:16

(I do that in vZome, and have always regretted it)

Scott (scott@vorthmann.org)
2018-09-03 18:05:10

better would be to align the target vector with the prototype, then just offset the "full-scale-vertices" to the end

Scott (scott@vorthmann.org)
2018-09-03 18:05:22

gotta run to drop Lia at practice... more details later!

jrus (me@jacobrus.com)
2018-09-03 18:05:36

okay, simon was fussing for a bit

jrus (me@jacobrus.com)
2018-09-03 18:05:38

now back 🙂

jrus (me@jacobrus.com)
2018-09-03 18:06:11

@Scott don't worry about division. it's not really any slower than any other arithmetic in my browser code

jrus (me@jacobrus.com)
2018-09-03 18:07:19

since the slow part in any case is the "simplify" that needs to do a memory lookup (or for bigger numbers, find the gcd and do 3 integer divisions)

jrus (me@jacobrus.com)
2018-09-03 18:07:33

but really it doesn't matter, computers are fast

jrus (me@jacobrus.com)
2018-09-03 18:09:05

@Scott for the geometries with an antiprism twist do you just keep those uniform in length? make them some proportion of the total distance? (what do you do if e.g. the strut is shorter than the antiprism part)

jrus (me@jacobrus.com)
2018-09-03 18:13:11

what is fullScaleVertices and halfScaleVertices ?

jrus (me@jacobrus.com)
2018-09-03 18:32:10

here converts your strings to integers

Scott (scott@vorthmann.org)
2018-09-03 18:34:34

cool

Scott (scott@vorthmann.org)
2018-09-03 18:35:12

fullScaleVertices are the ones that should "telescope" out to the end of any strut

jrus (me@jacobrus.com)
2018-09-03 18:35:13

with the point just being that this takes not much code, so don't worry about it either way

Scott (scott@vorthmann.org)
2018-09-03 18:35:33

halfScaleVertices are the (fixed size) antiprism that slides to the middle

jrus (me@jacobrus.com)
2018-09-03 18:35:49

what if there's not enough space for the halfscalevertices?

Scott (scott@vorthmann.org)
2018-09-03 18:36:09

then you get an ugly inside-out folded thingy 😉

Scott (scott@vorthmann.org)
2018-09-03 18:36:48

nothing will fall over, it just looks ugly. I stopped worrying about it a long time ago

jrus (me@jacobrus.com)
2018-09-03 18:37:03

heh

Scott (scott@vorthmann.org)
2018-09-03 18:37:26

actually the antiprism won't be inside-out... you can make vZome do this easily, I think

jrus (me@jacobrus.com)
2018-09-03 18:37:32

also converting to floats is easy https://beta.observablehq.com/d/db3ac0477ddb8fd3

Scott (scott@vorthmann.org)
2018-09-03 18:38:05

of course

Scott (scott@vorthmann.org)
2018-09-03 18:39:04

I'm parsing parsegoldenrational... my Javascript reading is still subpar

Scott (scott@vorthmann.org)
2018-09-03 18:39:16

but it looks simple enough

jrus (me@jacobrus.com)
2018-09-03 18:39:24

I can make it a bit clearer

Scott (scott@vorthmann.org)
2018-09-03 18:39:36

no, let me work it out

Scott (scott@vorthmann.org)
2018-09-03 18:40:47

nice!

jrus (me@jacobrus.com)
2018-09-03 18:41:22
Scott (scott@vorthmann.org)
2018-09-03 18:41:26

I haven't seen the tuple assignment used in that way, but I like it

Scott (scott@vorthmann.org)
2018-09-03 18:42:01

yes, much clearer

jrus (me@jacobrus.com)
2018-09-03 18:42:05

this is not super robust; it's going to break if you pass it "5" instead of "5/1" or whatever

jrus (me@jacobrus.com)
2018-09-03 18:42:19

it expects either a string ratio or an integer

Scott (scott@vorthmann.org)
2018-09-03 18:43:08

that's what I produce... I check "isInteger" to determine which to emit

Scott (scott@vorthmann.org)
2018-09-03 18:43:13

it's fine

jrus (me@jacobrus.com)
2018-09-03 18:43:36

I'm just saying, if humans tried to produce these files they could break it easily

jrus (me@jacobrus.com)
2018-09-03 18:43:42

🙂

Scott (scott@vorthmann.org)
2018-09-03 18:43:57

true

Scott (scott@vorthmann.org)
2018-09-03 18:44:03

not worried

Scott (scott@vorthmann.org)
2018-09-03 18:44:13

why are there NaNs in the vertices array?

jrus (me@jacobrus.com)
2018-09-03 18:44:35

oh whoops, somehow I reverted that thingy

jrus (me@jacobrus.com)
2018-09-03 18:44:59

oh wait, I just screwed something up

jrus (me@jacobrus.com)
2018-09-03 18:45:03

probably a typo somewhere

jrus (me@jacobrus.com)
2018-09-03 18:45:56

needs to be (!(typeof a1 === "number")) instead of (!typeof a1 === "number")

Scott (scott@vorthmann.org)
2018-09-03 18:46:13

lmao

Scott (scott@vorthmann.org)
2018-09-03 18:46:29

what is the logical negation of a type? 😉

jrus (me@jacobrus.com)
2018-09-03 18:46:55

dunno, but apparently not ever "number"

Scott (scott@vorthmann.org)
2018-09-03 18:48:15

much better

Scott (scott@vorthmann.org)
2018-09-03 18:49:56

So I didn't say it earlier, but my goal here is to render the VSON format... so for any strut we're rendering, we already know its orbit and zone and length

Scott (scott@vorthmann.org)
2018-09-03 18:50:46

so we just need a Geometry for that length and orbit, then we'll use the quaternion for that zone when we add the Mesh

jrus (me@jacobrus.com)
2018-09-03 18:50:56

okay

Scott (scott@vorthmann.org)
2018-09-03 18:51:33

we can later make it work without the orbit, zone, and length, and compute them all as you have been saying

jrus (me@jacobrus.com)
2018-09-03 18:51:40

sure

jrus (me@jacobrus.com)
2018-09-03 18:53:10

so I think it reduces arithmetic to use a matrix vs. a quaternion for actually multiplying vectors

jrus (me@jacobrus.com)
2018-09-03 18:53:21

but you can get a matrix from a quaternion easily

Scott (scott@vorthmann.org)
2018-09-03 18:53:45

sure, but then we need 60 different Geometries... if we let three.js do the final rotation, we need only one

Scott (scott@vorthmann.org)
2018-09-03 18:54:54

you can see the pattern in my existing vZomeRenderer

Scott (scott@vorthmann.org)
2018-09-03 18:55:31
Scott (scott@vorthmann.org)
2018-09-03 18:56:07

we are replacing the "getGeometry(...)" bit, as well as changing the "strut" object

jrus (me@jacobrus.com)
2018-09-03 18:57:06

@Scott yes you should just save one geometry. I am just saying that to rotate it into the right place you might want to use a matrix rather than a quaternion

jrus (me@jacobrus.com)
2018-09-03 18:57:26

but maybe you don't need to do too many of those rotations and it doesn't matter too much

Scott (scott@vorthmann.org)
2018-09-03 18:57:35

I wouldn't care... you can probably do either with 3js

jrus (me@jacobrus.com)
2018-09-03 18:57:46

oh you were using 3js to do the rotation?

jrus (me@jacobrus.com)
2018-09-03 18:57:52

got it

Scott (scott@vorthmann.org)
2018-09-03 18:57:52

yes

jrus (me@jacobrus.com)
2018-09-03 18:58:04

okay in that case keep doing what you are doing

Scott (scott@vorthmann.org)
2018-09-03 18:59:00

I'm going to focus on refactoring my renderer with this model in mind

Scott (scott@vorthmann.org)
2018-09-03 18:59:45

let me get some of the orbit and shape objects uploaded to gists

jrus (me@jacobrus.com)
2018-09-03 19:00:32

@Scott so do you have a map of zones -> quaternions?

Scott (scott@vorthmann.org)
2018-09-03 19:01:02

ironically, no I have the map of zones -> matrices

Scott (scott@vorthmann.org)
2018-09-03 19:01:04

coming shortly

Scott (scott@vorthmann.org)
2018-09-03 19:05:01

generating "lifelike-shapes.json" now

jrus (me@jacobrus.com)
2018-09-03 19:05:28

what are the permutations?

jrus (me@jacobrus.com)
2018-09-03 19:05:45

that's where each of the symmetries sends the other ones?

Scott (scott@vorthmann.org)
2018-09-03 19:06:15

you can work just with "orientation" indices, and permute those

Scott (scott@vorthmann.org)
2018-09-03 19:06:33

(until you actually need to reorient a vector, of course)

Scott (scott@vorthmann.org)
2018-09-03 19:07:17

I don't use the permutations much any more, but they do come in handy for a few things

Scott (scott@vorthmann.org)
2018-09-03 19:07:51

"If I rotate around red 14, where does it take yellow 23?"

jrus (me@jacobrus.com)
2018-09-03 19:08:10

so e.g. 1 and 2 are clearly 3-fold rotations

Scott (scott@vorthmann.org)
2018-09-03 19:08:45

yes, the first three are the permutations on the axes

Scott (scott@vorthmann.org)
2018-09-03 19:09:53

you'll find 12 like that, of course... easily correlated by looking at the matrices

Scott (scott@vorthmann.org)
2018-09-03 19:10:50

It may even be true that my Zomic language didn't use vectors at all... the orientation state of the virtual machine was just a permutation.

Scott (scott@vorthmann.org)
2018-09-03 19:11:00

That code still runs in vZome

Scott (scott@vorthmann.org)
2018-09-03 19:11:31

FYI, before I ever had direct manipulation with the mouse, I had an app that was driven by a Zomic script, and just rendered the result.

jrus (me@jacobrus.com)
2018-09-03 19:11:33

aha

jrus (me@jacobrus.com)
2018-09-03 19:11:48

and that one just used the numbered directions

Scott (scott@vorthmann.org)
2018-09-03 19:11:51

yes

Scott (scott@vorthmann.org)
2018-09-03 19:11:58

mapped from the Zomod names

jrus (me@jacobrus.com)
2018-09-03 19:12:16

I should render out some gnomonic projections with numbered triangles

jrus (me@jacobrus.com)
2018-09-03 19:12:28

or maybe spheres

Scott (scott@vorthmann.org)
2018-09-03 19:12:59

yes, something... I don't have a pre-formatted "key" for the orientations... just the handwritten numbered dodec you saw

jrus (me@jacobrus.com)
2018-09-03 19:13:25

how systematic was the numbering choice?

Scott (scott@vorthmann.org)
2018-09-03 19:13:29

this would be a great addition to my vZome Utilities notebook

Scott (scott@vorthmann.org)
2018-09-03 19:13:32

very

jrus (me@jacobrus.com)
2018-09-03 19:13:47

it wasn't just numbered randomly and then each one manually computed 🙂

Scott (scott@vorthmann.org)
2018-09-03 19:13:56

would you do that?

jrus (me@jacobrus.com)
2018-09-03 19:14:07

I'm curious what the system is

Scott (scott@vorthmann.org)
2018-09-03 19:14:13

let me share the code

Scott (scott@vorthmann.org)
2018-09-03 19:16:37
Scott (scott@vorthmann.org)
2018-09-03 19:16:59

not as algorithmic as it could have been... I wanted to be able to read it

Scott (scott@vorthmann.org)
2018-09-03 19:17:37

hmmm... feels like it is still missing some information

Scott (scott@vorthmann.org)
2018-09-03 19:20:05

right... the createInitialPermutations function is specific to particular symmetries, but this part is not

Scott (scott@vorthmann.org)
2018-09-03 19:20:42

forgive the ancient verbose Java... I'm sure even Java 8 would make this a lot simpler

jrus (me@jacobrus.com)
2018-09-03 19:20:44
jrus (me@jacobrus.com)
2018-09-03 19:21:04

now I'll look at your code

Scott (scott@vorthmann.org)
2018-09-03 19:21:47

cool... what's the diff between matrices and matrices2?

jrus (me@jacobrus.com)
2018-09-03 19:22:36

the second one shortens [1,0,1] to [1], etc.

Scott (scott@vorthmann.org)
2018-09-03 19:22:50

I see it

Scott (scott@vorthmann.org)
2018-09-03 19:22:51

thx

Scott (scott@vorthmann.org)
2018-09-03 19:25:16

OK, I added "lifelike-shapes.json" to the gist

jrus (me@jacobrus.com)
2018-09-03 19:26:09

so okay, your 4 blocks are +++, +--, --+, -+-, then in each block that there's rotation around the red axis, then in each of those blocks there's a permutation of axes

Scott (scott@vorthmann.org)
2018-09-03 19:26:29

sounds right

jrus (me@jacobrus.com)
2018-09-03 19:26:33

that's pretty well the same as my icosahedron symmetry code but maybe in a different order

jrus (me@jacobrus.com)
2018-09-03 19:26:51

I can try to put mine in the same order

Scott (scott@vorthmann.org)
2018-09-03 19:26:58

couldn't be too different, unless I did some inefficiency

jrus (me@jacobrus.com)
2018-09-03 19:27:00

oh wait, maybe not as easily

jrus (me@jacobrus.com)
2018-09-03 19:27:13

since I have the red ones as the outer blocks

jrus (me@jacobrus.com)
2018-09-03 19:27:38

I found the code shorter to put the yellow and blue loops together and unroll them

Scott (scott@vorthmann.org)
2018-09-03 19:27:52

your code is a lot prettier

Scott (scott@vorthmann.org)
2018-09-03 19:28:04

but yours is operating directly on vectors, right?

jrus (me@jacobrus.com)
2018-09-03 19:28:45

yes, but it could be done in terms of lists of permutations or matrices if you wanted

jrus (me@jacobrus.com)
2018-09-03 19:29:13

to get matrices out you can just dump [1,0,0], [0,1,0], [0,0,1] into that code

Scott (scott@vorthmann.org)
2018-09-03 19:29:34

yes, that's similar to how I generate my matrices, IIRC

jrus (me@jacobrus.com)
2018-09-03 19:29:56

my code also started uglier than that. I just spent more time than I needed rewriting it until I couldn't figure out how to reduce it further 🙂

jrus (me@jacobrus.com)
2018-09-03 19:30:32

it's not actually quite as efficient as it could be; it does one matrix multiplication more than necessary

Scott (scott@vorthmann.org)
2018-09-03 19:31:38

we can align later, or now, as you like. Since we have the matrices to go with vZome's indices, we are not blocked.

jrus (me@jacobrus.com)
2018-09-03 19:31:49

I don't think it matters

jrus (me@jacobrus.com)
2018-09-03 19:32:11

we can use vzome's numbers

jrus (me@jacobrus.com)
2018-09-03 19:33:51

so how do you decide which orientation a given strut is in?

jrus (me@jacobrus.com)
2018-09-03 19:34:15

if someone says "connect these two nodes"

Scott (scott@vorthmann.org)
2018-09-03 19:34:29

whichever index it ends up on, after my clumsy find-the-zone search

jrus (me@jacobrus.com)
2018-09-03 19:34:33

gotcha

jrus (me@jacobrus.com)
2018-09-03 19:34:45

this is inevitably a search problem

Scott (scott@vorthmann.org)
2018-09-03 19:35:21

I don't care if there is a canonical name for red 23... at least not up until this point

jrus (me@jacobrus.com)
2018-09-03 19:35:37

it needs a bunch of tests w/r/t various planes through the origin

jrus (me@jacobrus.com)
2018-09-03 19:35:53

or the like

Scott (scott@vorthmann.org)
2018-09-03 19:36:38

yes... let's not get into that again just now... needs face-and-whiteboard-and-screen time I think

jrus (me@jacobrus.com)
2018-09-03 19:37:02

one thing you can do is find the normalized vector defining the "orbit", then find the quaternion which rotates your original strut onto that one, and then just lookup that quaternion

jrus (me@jacobrus.com)
2018-09-03 19:37:19

maybe a bit roundabout and more expensive than necessary

jrus (me@jacobrus.com)
2018-09-03 19:37:37

anyway, no worries

Scott (scott@vorthmann.org)
2018-09-03 19:37:47

we could write a whole notebook on different approaches... a fun exercise

jrus (me@jacobrus.com)
2018-09-03 19:37:58

so okay, given a vson file, what do we need to do to convert to a 3js-compatible format?

Scott (scott@vorthmann.org)
2018-09-03 19:38:10

let me grab a snippet

Scott (scott@vorthmann.org)
2018-09-03 19:39:16

Here's my simple test case

Scott (scott@vorthmann.org)
2018-09-03 19:39:27

we can assume golden/icosahedral for now

Scott (scott@vorthmann.org)
2018-09-03 19:39:56

we have both vector and length/orbit/orientation we can work with

Scott (scott@vorthmann.org)
2018-09-03 19:40:54
  1. create or look-up the Geometry for the strut length, given the orbit
Scott (scott@vorthmann.org)
2018-09-03 19:41:20
  1. create or look up a quaternion corresponding to the matrix for that orientation
Scott (scott@vorthmann.org)
2018-09-03 19:41:47

I'm writing the function that will call getGeometry and getQuaternion

Scott (scott@vorthmann.org)
2018-09-03 19:42:00

we just need to nail down the params

jrus (me@jacobrus.com)
2018-09-03 19:43:57

hey sorry I was out for a sec

jrus (me@jacobrus.com)
2018-09-03 19:44:01

okay, looking

Scott (scott@vorthmann.org)
2018-09-03 19:45:04

(I don't need to re-share after every save, right? The URL is fixed?)

jrus (me@jacobrus.com)
2018-09-03 19:46:42

the URL is fixed

jrus (me@jacobrus.com)
2018-09-03 19:46:55

but to get updated content you need to click the "reshare" link

Scott (scott@vorthmann.org)
2018-09-03 19:47:01

ok

jrus (me@jacobrus.com)
2018-09-03 19:47:16

if you just modify a cell other people won't see it

Scott (scott@vorthmann.org)
2018-09-03 19:47:37

got it

Scott (scott@vorthmann.org)
2018-09-03 19:48:14

"modified... reshare" warning and link never goes away

Scott (scott@vorthmann.org)
2018-09-03 19:48:23

oh, now it did

jrus (me@jacobrus.com)
2018-09-03 19:48:28

if you click that itshould disappear

jrus (me@jacobrus.com)
2018-09-03 19:56:18

I should figure out if all the necessary quaternions can be stored using algebraic rationals

jrus (me@jacobrus.com)
2018-09-03 19:56:43

I think maybe so if we don't force them to be unit length

Scott (scott@vorthmann.org)
2018-09-03 19:56:57

we can always scale by a float afterwards

jrus (me@jacobrus.com)
2018-09-03 19:57:05

right

Scott (scott@vorthmann.org)
2018-09-03 19:57:44

you mean using algebraic integers, avoiding rationals?

jrus (me@jacobrus.com)
2018-09-03 19:57:55

oh, even that

jrus (me@jacobrus.com)
2018-09-03 19:58:09

but I think for unit length some might have square roots?

Scott (scott@vorthmann.org)
2018-09-03 19:58:35

they certainly all come out as algebraic rationals

Scott (scott@vorthmann.org)
2018-09-03 19:58:43

I would think, anyway

Scott (scott@vorthmann.org)
2018-09-03 19:59:06

good question, in other words!

jrus (me@jacobrus.com)
2018-09-03 20:02:00

well e.g. a 1/3 turn rotation about (1,1,1) should be cos(π/3) + sin(π/3)i + sin(π/3)j + sin(π/3)k

jrus (me@jacobrus.com)
2018-09-03 20:02:34

erm

jrus (me@jacobrus.com)
2018-09-03 20:03:22

nevermind; should be 1/2 + 1/2(i + j + k)

jrus (me@jacobrus.com)
2018-09-03 20:03:32

the √3 cancels

jrus (me@jacobrus.com)
2018-09-03 20:04:13

you are right they are all rational

Scott (scott@vorthmann.org)
2018-09-03 20:04:49

whew

jrus (me@jacobrus.com)
2018-09-03 20:04:55

since a fifth turn rotation about the x axis is also golden rational

Scott (scott@vorthmann.org)
2018-09-03 20:05:36

we don't rotate 5x around X

Scott (scott@vorthmann.org)
2018-09-03 20:05:42

we do it around the red axis

jrus (me@jacobrus.com)
2018-09-03 20:05:51

oh right

Scott (scott@vorthmann.org)
2018-09-03 20:05:54

but I know what you meant

jrus (me@jacobrus.com)
2018-09-03 20:05:56

but still I think

jrus (me@jacobrus.com)
2018-09-03 20:06:18

so we should be able to write a function for multiplying quaternions, and then build up the list of quaternions for these rotations using code pretty similar to the one I had posted for finding the symmetries of vectors

Scott (scott@vorthmann.org)
2018-09-03 20:06:29

yes

Scott (scott@vorthmann.org)
2018-09-03 20:07:19

gotta go get Lia... back in 40

jrus (me@jacobrus.com)
2018-09-03 20:07:25

cheers

Scott (scott@vorthmann.org)
2018-09-03 20:07:50

reshared... see vZomeCleverRenderer, a WIP

Scott (scott@vorthmann.org)
2018-09-03 20:44:07

I'm back

jrus (me@jacobrus.com)
2018-09-03 20:45:02

okay, I ate a bit

jrus (me@jacobrus.com)
2018-09-03 21:05:54

@Scott so okay, I'm going to stop fiddling with quaternions for the moment. what's your link?

jrus (me@jacobrus.com)
2018-09-03 21:06:25

Or is this still the WIP vZome Utilities notebook?

Scott (scott@vorthmann.org)
2018-09-03 21:06:43

yes

Scott (scott@vorthmann.org)
2018-09-03 21:07:12

working on a bug right now... everything is stubbed out so I can render balls

Scott (scott@vorthmann.org)
2018-09-03 21:12:20

got it

Scott (scott@vorthmann.org)
2018-09-03 21:12:36

forgot that parseGoldenRational was not evaluating to float

jrus (me@jacobrus.com)
2018-09-03 21:13:02

feel free to make a function that directly spits out a float

Scott (scott@vorthmann.org)
2018-09-03 21:13:11

sure

Scott (scott@vorthmann.org)
2018-09-03 21:20:39

success! reshared

jrus (me@jacobrus.com)
2018-09-03 21:26:46

nice

jrus (me@jacobrus.com)
2018-09-03 21:27:24

oh I see, you are just drawing the balls for now

Scott (scott@vorthmann.org)
2018-09-03 21:28:37

about to draw all struts as yellow:1 also

jrus (me@jacobrus.com)
2018-09-03 21:28:46

sounds good

jrus (me@jacobrus.com)
2018-09-03 21:29:09

so is this thing just ticking away irrespective of mouse input?

jrus (me@jacobrus.com)
2018-09-03 21:29:36

it seems to eat all my scrollwheel events from anything I do on the page

Scott (scott@vorthmann.org)
2018-09-03 21:29:40

yes

Scott (scott@vorthmann.org)
2018-09-03 21:29:52

the problem is that the mouselistener is attached at the doc element

jrus (me@jacobrus.com)
2018-09-03 21:29:56

I guess that's the easiest way to work on it for now

Scott (scott@vorthmann.org)
2018-09-03 21:30:04

I could not get the scroll or drag to work on any other element

Scott (scott@vorthmann.org)
2018-09-03 21:30:15

scroll in the borders to scroll the page

jrus (me@jacobrus.com)
2018-09-03 21:30:19

because you definitely want different behavior 'in production'

Scott (scott@vorthmann.org)
2018-09-03 21:30:25

oh yeah

jrus (me@jacobrus.com)
2018-09-03 21:30:42

I can try to fiddle with that at some point

Scott (scott@vorthmann.org)
2018-09-03 21:31:00

but I need help there, too... I copied the Trackball code in here just for debugging, but I haven't figured it out

Scott (scott@vorthmann.org)
2018-09-03 21:31:28

ok, reshared... you should see hypershort yellow struts in different colors

jrus (me@jacobrus.com)
2018-09-03 21:31:50

yay colors

Scott (scott@vorthmann.org)
2018-09-03 21:32:42

and it just happens to illustrate the problem with the midpoint antiprism

jrus (me@jacobrus.com)
2018-09-03 21:33:21

ah I see

jrus (me@jacobrus.com)
2018-09-03 21:33:47

I wonder how it would work if you just make the antiprism 1/3 the length of the part of the strut visible between balls

jrus (me@jacobrus.com)
2018-09-03 21:34:15

Maybe stuff gets tricky with very short struts of other orbits

jrus (me@jacobrus.com)
2018-09-03 21:34:35

not with an antiprism but with some kind of correction at the ends

Scott (scott@vorthmann.org)
2018-09-03 21:35:36

really short struts get ugly regardless, even with good modeling, since they often just join the balls without reflecting the centerline (except for RYB)

Scott (scott@vorthmann.org)
2018-09-03 21:36:00

better to just give up on physical plausibility

jrus (me@jacobrus.com)
2018-09-03 21:36:37

reflecting the centerline?

Scott (scott@vorthmann.org)
2018-09-03 21:37:48

sorry, poor choice of words... "without illustrating the centerline"

jrus (me@jacobrus.com)
2018-09-03 21:37:56

oh I see

jrus (me@jacobrus.com)
2018-09-03 21:37:58

that's okay

Scott (scott@vorthmann.org)
2018-09-03 21:38:00

a very short lavender, for example, looks silly

Scott (scott@vorthmann.org)
2018-09-03 21:38:19

fixed the colors 😉

Scott (scott@vorthmann.org)
2018-09-03 21:53:11

OK, I fixed the signature of createStrutGeometry

Scott (scott@vorthmann.org)
2018-09-03 21:53:32

now I need to cache them

Scott (scott@vorthmann.org)
2018-09-03 21:54:58

sorry, it is currently called getShapeGeometry

Scott (scott@vorthmann.org)
2018-09-03 22:20:09

geometry cache now implemented

Scott (scott@vorthmann.org)
2018-09-03 22:20:21

I'm going to do the ball geometry now

Scott (scott@vorthmann.org)
2018-09-03 22:30:50

ok, balls with triangular faces are done... one triangle per face

jrus (me@jacobrus.com)
2018-09-03 22:39:22

nice

jrus (me@jacobrus.com)
2018-09-03 22:39:30

we were walking the dog around the block

Scott (scott@vorthmann.org)
2018-09-03 22:46:48

now switched to "lifelike"... though it is not very, with only the one triangle per face

Scott (scott@vorthmann.org)
2018-09-03 23:12:18

triangulating a polygon is a nice way to learn reduce

jrus (me@jacobrus.com)
2018-09-03 23:12:49

luckily you just do each object once and cache them, right?

Scott (scott@vorthmann.org)
2018-09-03 23:20:47

yes

Scott (scott@vorthmann.org)
2018-09-03 23:35:58

is there a way to unpublish? meant to share

Scott (scott@vorthmann.org)
2018-09-03 23:36:29

got my reduce working, first try!

Scott (scott@vorthmann.org)
2018-09-03 23:44:31

OK, I used the same code for balls and struts. Without the adjustment for fullScaleVertices and halfScaleVertices, the struts are rendered inside-out, and inside the balls.

jrus (me@jacobrus.com)
2018-09-03 23:46:18

@Scott I don't think you can unpublish. only fork and delete

Scott (scott@vorthmann.org)
2018-09-03 23:46:57

yup

Scott (scott@vorthmann.org)
2018-09-04 00:11:28

I tried to ignore strut length, and just use the shape prototype vector as the endpoint, and derive midpoint from that. It is buggy. going to bed

jrus (me@jacobrus.com)
2018-09-04 00:25:31

@Scott 'night. I've been rolling marbles with simon

jrus (me@jacobrus.com)
2018-09-04 10:38:19

@Scott okay, I fixed two silly bugs in my caching gcd code. as soon as I publish your use of simplify3 won't be compromised. 🙂

jrus (me@jacobrus.com)
2018-09-04 10:39:02

first bug: I was using a cache of 8-bit integers for values up to 1024

jrus (me@jacobrus.com)
2018-09-04 10:39:29

whoops

jrus (me@jacobrus.com)
2018-09-04 10:52:27

second bug: I wasn't properly dealing with the case where the gcd itself is bigger than the cache size

Scott (scott@vorthmann.org)
2018-09-04 12:05:34

Ha... I was sure the bugs were mine

Scott (scott@vorthmann.org)
2018-09-04 12:06:04

Thanks for digging!

jrus (me@jacobrus.com)
2018-09-04 12:25:19

@Scott did that fix something?

jrus (me@jacobrus.com)
2018-09-04 12:25:41

it's quite possible my code had been breaking you if you were doing large arithmetic

jrus (me@jacobrus.com)
2018-09-04 12:25:47

(not that large)

jrus (me@jacobrus.com)
2018-09-04 12:26:15

this is a good reason to make real tests 🙂

jrus (me@jacobrus.com)
2018-09-04 12:26:49

and also to start with simple obviously working code before worrying about optimizations

👍 Scott
Scott (scott@vorthmann.org)
2018-09-04 12:27:30

Not sure... My notebook did not load when I tried. Didn't have time to wait and retry

Scott (scott@vorthmann.org)
2018-09-04 12:28:02

+1

jrus (me@jacobrus.com)
2018-09-04 12:28:12

no worries. I have to go read a book with simon

Scott (scott@vorthmann.org)
2018-09-04 12:28:31

L8r

jrus (me@jacobrus.com)
2018-09-04 12:28:47

I'm getting myself super confused trying to figure out the right quaternion for a 5th turn about the red axis

jrus (me@jacobrus.com)
2018-09-04 12:29:21

I thought it was (φ/2, 1/2, 0, φ/2)

jrus (me@jacobrus.com)
2018-09-04 12:29:30

but I think that's not quite right

jrus (me@jacobrus.com)
2018-09-04 12:34:17

Okay I think it is actually (φ/2, φ⁻/2, 0, 1/2)

jrus (me@jacobrus.com)
2018-09-04 12:35:31

okay, phew

jrus (me@jacobrus.com)
2018-09-04 13:22:32

quadrance = 1/4(φ² + φ⁻² + 1) = 1/4(1 + φ + 2 – φ + 1) = 4/4 = 1

jrus (me@jacobrus.com)
2018-09-04 13:25:59

φ² + φ⁻² = 3 is the same fact that makes the yellow directions of (1, 1, 1) and (φ, 0, φ⁻) have the same length

Scott (scott@vorthmann.org)
2018-09-04 13:34:30

Nice

Scott (scott@vorthmann.org)
2018-09-04 18:52:21

@jrus my notebook goes haywire when I import grdiv

jrus (me@jacobrus.com)
2018-09-04 19:12:30

hm

jrus (me@jacobrus.com)
2018-09-04 19:12:33

let me look

jrus (me@jacobrus.com)
2018-09-04 19:13:01

@Scott if you do it now it does?

Scott (scott@vorthmann.org)
2018-09-04 19:13:13

I tried bypassing simplify3 with a variant that doesn't cache, but that didn't help... though who knows if reload might have fixed that

Scott (scott@vorthmann.org)
2018-09-04 19:13:16

let me try

jrus (me@jacobrus.com)
2018-09-04 19:13:40

I might have accidentally published one with a syntax error or something

Scott (scott@vorthmann.org)
2018-09-04 19:13:47

so far so good, with no grdiv

Scott (scott@vorthmann.org)
2018-09-04 19:14:22

no, grdiv is still a killer

jrus (me@jacobrus.com)
2018-09-04 19:14:25

@Scott if you go to https://beta.observablehq.com/@jrus/zome-arithmetic does the grdiv cell have errors in evaluating?

Scott (scott@vorthmann.org)
2018-09-04 19:14:55

no, I've been looking at your notebook all afternoon

Scott (scott@vorthmann.org)
2018-09-04 19:15:06

gotta go make dinner, darn

Scott (scott@vorthmann.org)
2018-09-04 19:15:12

made a deal with Lia

jrus (me@jacobrus.com)
2018-09-04 19:15:29

works for me to import to another notebook

jrus (me@jacobrus.com)
2018-09-04 19:15:36

maybe you have a cached bad version or something?

jrus (me@jacobrus.com)
2018-09-04 19:16:09

so the quaternions are super easy actually

jrus (me@jacobrus.com)
2018-09-04 19:18:31

we want combinations of [φ/2, φ⁻/2, 0, 1/2] to powers of 0–4, [1/2, 1/2, 1/2, 1/2] in powers of 0–2, [0, 1, 0, 0], and [0, 0, 1, 0]

Scott (scott@vorthmann.org)
2018-09-04 19:23:19

nice

Scott (scott@vorthmann.org)
2018-09-04 19:24:09

is that right-multiplication, left-multiplication, or both (with a conjugate)?

jrus (me@jacobrus.com)
2018-09-04 19:24:26

either right or left, doesn't matter

jrus (me@jacobrus.com)
2018-09-04 19:24:43

you'll get the symmetries in a different order depending on which way you do it

Scott (scott@vorthmann.org)
2018-09-04 19:24:52

ok... and the vector is just augmented with a 1 in the 4th coordinate?

jrus (me@jacobrus.com)
2018-09-04 19:25:06

oh, I put the scalar in the 0th coordinate

Scott (scott@vorthmann.org)
2018-09-04 19:25:10

ok

jrus (me@jacobrus.com)
2018-09-04 19:25:22

it's always best to start with the scalar

jrus (me@jacobrus.com)
2018-09-04 19:25:26

IMO

Scott (scott@vorthmann.org)
2018-09-04 19:25:29

sounds good

Scott (scott@vorthmann.org)
2018-09-04 19:26:07

as long as we have a convention, and can align the effects with the existing vZome matrices

jrus (me@jacobrus.com)
2018-09-04 19:26:31

it seemed like the 3JS version had named x, y, z, w, so the order doesn't really matter

jrus (me@jacobrus.com)
2018-09-04 19:27:07

[maybe I'm misremembering. I only looked briefly at it]

jrus (me@jacobrus.com)
2018-09-04 19:28:33

I'm also not sure if you care about normalizing quaternions to have positive scalar component [the 3D rotation is the same for quaternions pointed in opposite directions, because of the sandwich multiplication]

jrus (me@jacobrus.com)
2018-09-04 19:29:18

you can think of there being either e.g. a rotation by 3π/2 anticlockwise or π/2 clockwise, which get separate quaternions

Scott (scott@vorthmann.org)
2018-09-04 19:31:52

I'm OK with anything as long as the results match... if we try a model that has all greens (or better, some chiral strut), we'll have a good test

jrus (me@jacobrus.com)
2018-09-04 19:32:31

we can certainly make the code match vzome numbered directions

Scott (scott@vorthmann.org)
2018-09-04 19:32:43

for that matter, I don't think I've done a verification like that even with my React code, which is the basis for my new renderer code

jrus (me@jacobrus.com)
2018-09-04 19:33:10

I'll have to go look at those again to figure out what that order is 🙂

Scott (scott@vorthmann.org)
2018-09-04 19:38:09

OK, I've shared a new fork: https://beta.observablehq.com/d/70a3c92c576398bb

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-04 19:38:21

it has resolution errors, since it does not have grdiv imported

Scott (scott@vorthmann.org)
2018-09-04 19:38:49

if you add grdiv to the import, I think you'll see some of the cells get wedged... no errors, just blank

Scott (scott@vorthmann.org)
2018-09-04 19:39:34

I'm going to give it a few minutes... maybe it is just my poor little CPU

jrus (me@jacobrus.com)
2018-09-04 19:43:50

heh

Scott (scott@vorthmann.org)
2018-09-04 19:44:14

nope, still hung

jrus (me@jacobrus.com)
2018-09-04 19:45:54

maybe they cached the version somehow

jrus (me@jacobrus.com)
2018-09-04 19:46:06

for the notebook

jrus (me@jacobrus.com)
2018-09-04 19:46:38

or maybe you are using grdiv in a way that causes the hang

Scott (scott@vorthmann.org)
2018-09-04 19:46:41

could be... supposed to always be the latest publish

jrus (me@jacobrus.com)
2018-09-04 19:46:43

(possibly due to a bug in my code)

Scott (scott@vorthmann.org)
2018-09-04 19:46:49

let's check

Scott (scott@vorthmann.org)
2018-09-04 19:47:13

endpoint = shape .prototypeVector; midpoint = endpoint .map( x => grdiv( x, [2] ) );

Scott (scott@vorthmann.org)
2018-09-04 19:47:30

oh, that's it

jrus (me@jacobrus.com)
2018-09-04 19:47:46

I don't know what x might be

Scott (scott@vorthmann.org)
2018-09-04 19:47:46

prototypeVector has not been parsed to a one-divisor form

Scott (scott@vorthmann.org)
2018-09-04 19:47:48

duh

jrus (me@jacobrus.com)
2018-09-04 19:47:51

aha

jrus (me@jacobrus.com)
2018-09-04 19:48:01

I should still probably avoid infinite loops 🙂

Scott (scott@vorthmann.org)
2018-09-04 19:48:10

a noble goal

Scott (scott@vorthmann.org)
2018-09-04 19:48:28

I'll give you a test case for that 😉

jrus (me@jacobrus.com)
2018-09-04 19:48:41

I don't really want to add a bunch of type checks though

Scott (scott@vorthmann.org)
2018-09-04 19:48:56

no, I agree... this is operator error

jrus (me@jacobrus.com)
2018-09-04 19:48:58

I guess that's the advantage of having a class etc.

Scott (scott@vorthmann.org)
2018-09-04 19:50:08

[[5,-3],[2,-1],[2,0]].map( x => grdiv( x, [2] ) )

jrus (me@jacobrus.com)
2018-09-04 19:50:25

what's the two dots for?

Scott (scott@vorthmann.org)
2018-09-04 19:50:33

for typo

jrus (me@jacobrus.com)
2018-09-04 19:50:40

that one breaks?

jrus (me@jacobrus.com)
2018-09-04 19:51:12

should work anyhow

jrus (me@jacobrus.com)
2018-09-04 19:51:16

works in my browser

Scott (scott@vorthmann.org)
2018-09-04 19:51:38

well, I chose a prototypeVector at random... I was guessing that any vector with 2-element coordinates would fail

Scott (scott@vorthmann.org)
2018-09-04 19:52:12

but perhaps you need a coordinate like [1, "1/2"]

jrus (me@jacobrus.com)
2018-09-04 19:52:13

it should default the denominator to 1

Scott (scott@vorthmann.org)
2018-09-04 19:52:17

bet that will kill it

jrus (me@jacobrus.com)
2018-09-04 19:52:24

if you pass it a string I can believe it will break

Scott (scott@vorthmann.org)
2018-09-04 19:52:42

as it should

jrus (me@jacobrus.com)
2018-09-04 19:53:26

I think I'm going to leave this code without typechecks in every function; part of the goal is to show how short each function can be if someone looks at this notebook

jrus (me@jacobrus.com)
2018-09-04 19:53:35

if making a proper library

Scott (scott@vorthmann.org)
2018-09-04 19:53:37

yes, I agree

jrus (me@jacobrus.com)
2018-09-04 19:53:43

then typechecking probably makes some sense

Scott (scott@vorthmann.org)
2018-09-04 19:54:02

funny, not finding any strings in the prototypeVectors

jrus (me@jacobrus.com)
2018-09-04 19:54:22

I'll take a look at your notebook

Scott (scott@vorthmann.org)
2018-09-04 19:54:33

but I'm going to add the parse function anyway

Scott (scott@vorthmann.org)
2018-09-04 19:56:37

hmmm... still something wrong with createShapeGeometry

Scott (scott@vorthmann.org)
2018-09-04 19:56:49

don't worry, you don't need to fix my bugs

jrus (me@jacobrus.com)
2018-09-04 19:57:43

the green vector definitely has "1/2", "1/2", etc.

Scott (scott@vorthmann.org)
2018-09-04 19:57:58

oh, I missed that one

jrus (me@jacobrus.com)
2018-09-04 19:58:57

I think various others as well

jrus (me@jacobrus.com)
2018-09-04 19:59:40

so yeah, parsing those to 3-element rational representation might fix the problem

Scott (scott@vorthmann.org)
2018-09-04 20:03:20

OK, fixed that ... much better now. I still have a defect, but not so catastrophic. Reshared.

Scott (scott@vorthmann.org)
2018-09-04 20:06:19

just need to break up createShapeGeometry into smaller, testable functions

Scott (scott@vorthmann.org)
2018-09-04 20:11:54

ok

Scott (scott@vorthmann.org)
2018-09-04 20:12:21

silly defect fixed... render giving me red and yellow struts now, though not scaled right (and obviously not rotated right)

Scott (scott@vorthmann.org)
2018-09-04 20:12:28

reshared

jrus (me@jacobrus.com)
2018-09-04 20:12:32

sorry, I'm fiddling with other stuff for a moment

jrus (me@jacobrus.com)
2018-09-04 20:12:37

I'll look in a minute

Scott (scott@vorthmann.org)
2018-09-04 20:12:44

np, whenever

Scott (scott@vorthmann.org)
2018-09-04 20:23:33

OK! Strut lengths now applied, @jrus

jrus (me@jacobrus.com)
2018-09-04 20:32:59

```icosahedralquaternions = { const cartesianproduct = (u, v) => [].concat(...u.map((a) => v.map((b) => quatmul(a, b))));

const one = [[1],[0],[0],[0]]; const powers = function powers (q, n) { for (var i = 2, array = [one, q]; i < n; array[i] = quatmul(array[i-1], q), i++) {}; return array; } const red = powers([[0,1,2], [-1,1,2], [0], [1,0,2]], 5); const yellow = powers([[1,0,2],[1,0,2],[1,0,2],[1,0,2]], 3) const blue = [one, [[0],[1],[0],[0]], [[0],[0],[1],[0]], [[0],[0],[0],[1]]];

return html${cartesian_product(red, cartesian_product(yellow, blue)).map(vprint)}; }```

jrus (me@jacobrus.com)
2018-09-04 20:33:05

@Scott is this too confusing?

jrus (me@jacobrus.com)
2018-09-04 20:33:23

it's kind of an abuse of a for loop there

jrus (me@jacobrus.com)
2018-09-04 20:34:45

oh the last line would not in practice return html, but just the list of quaternions

jrus (me@jacobrus.com)
2018-09-04 20:36:40

maybe better to just be more explicit, do the loop for red, and write down the yellow vectors directly

jrus (me@jacobrus.com)
2018-09-04 20:38:36

```icosahedralquaternions = { const cartesianproduct = (u, v) => [].concat(...u.map((a) => v.map((b) => quatmul(a, b))));

const one = [[1],[0],[0],[0]]; const red = [one, [[0,1,2], [-1,1,2], [0], [1,0,2]]] for (var i = 2; i < 5; red[i] = quatmul(red[i-1], red[1]), i++) {}; const yellow = [one, [[1,0,2],[1,0,2],[1,0,2],[1,0,2]], [[-1,0,2],[1,0,2],[1,0,2],[1,0,2]]]; const blue = [one, [[0],[1],[0],[0]], [[0],[0],[1],[0]], [[0],[0],[0],[1]]]; return cartesianproduct(red, cartesianproduct(yellow, blue)); }```

Scott (scott@vorthmann.org)
2018-09-04 20:40:35

I don't think either would be too confusing if I were a bit more used to ES6 and functional programming

Scott (scott@vorthmann.org)
2018-09-04 20:40:57

in other words, my confusion bar is too low

Scott (scott@vorthmann.org)
2018-09-04 20:41:45

have time for some audio?

Scott (scott@vorthmann.org)
2018-09-04 20:42:38

(a phone call)

jrus (me@jacobrus.com)
2018-09-04 20:42:39

sure

jrus (me@jacobrus.com)
2018-09-04 20:46:07

```icosahedralquaternions = { const cartesianproduct = (u, v) => [].concat(...u.map((a) => v.map((b) => quatmul(a, b))));

const one = [[1],[0],[0],[0]]; const red = [one, [[0,1,2], [-1,1,2], [0], [1,0,2]]] for (var i = 2; i < 5; red[i] = quatmul(red[i-1], red[1]), i++) {}; const yellow = [one, [[1,0,2],[1,0,2],[1,0,2],[1,0,2]], [[-1,0,2],[1,0,2],[1,0,2],[1,0,2]]]; const blue = [one, [[0],[1],[0],[0]], [[0],[0],[1],[0]], [[0],[0],[0],[1]]]; return [red, yellow, blue].reduce(cartesian_product); }```

jrus (me@jacobrus.com)
2018-09-04 20:50:23

```icosahedralquaternions = { const cartesianproduct = (u, v) => [].concat(...u.map((a) => v.map((b) => quatmul(a, b))));

const one = [[1],[0],[0],[0]]; const red = [one, [[0,1,2], [-1,1,2], [0], [1,0,2]]] for (var i = 2; i < 5; i++) red[i] = quatmul(red[i-1], red[1]); const yellow = [one, [[1,0,2],[1,0,2],[1,0,2],[1,0,2]], [[-1,0,2],[1,0,2],[1,0,2],[1,0,2]]]; const blue = [one, [[0],[1],[0],[0]], [[0],[0],[1],[0]], [[0],[0],[0],[1]]]; return [red, yellow, blue].reduce(cartesian_product); }```

Scott (scott@vorthmann.org)
2018-09-04 20:52:05

function triangulate( polygon ) { return polygon .reduce( (tris, vertex, index, array) => { if ( index >= 2 ) { tris .push( new THREE.Face3( array[0], array[index-1], array[index] ) ); } return tris }, [] ); }

Scott (scott@vorthmann.org)
2018-09-04 20:56:35

https://gist.githubusercontent.com/vorth/b6294348ebfb7846d7cbe29f1ec38b9f

Gist
Scott (scott@vorthmann.org)
2018-09-04 21:18:01

crap, I was doing the matrix=>quaternion conversion on the Java side, using Java3d

jrus (me@jacobrus.com)
2018-09-04 21:18:31

oh, I started doing some unreleated code cleanups. so my time estimate is not very useful

Scott (scott@vorthmann.org)
2018-09-04 21:18:37

no worries

Scott (scott@vorthmann.org)
2018-09-04 21:18:59

I'll reshare... my notebook now has the icosahedral matrices in useful form (yours)

Scott (scott@vorthmann.org)
2018-09-04 21:20:19

double crap... I have a meeting with the India team

jrus (me@jacobrus.com)
2018-09-04 21:20:29

cheers

Scott (scott@vorthmann.org)
2018-09-04 21:20:29

later

Scott (scott@vorthmann.org)
2018-09-04 21:20:54

reshared... see icosahedralrationalmatrices

jrus (me@jacobrus.com)
2018-09-04 21:24:43

I might have to do some simon book reading

jrus (me@jacobrus.com)
2018-09-04 21:25:01

bah, sorry. didn't actually get to spitting out matrices. did clean up some other code.

Scott (scott@vorthmann.org)
2018-09-04 21:25:22

np, we're not in a rush...

jrus (me@jacobrus.com)
2018-09-04 21:26:30

for a given quaternion Q, is the rotation QvQ⁻ or Q⁻vQ ?

Scott (scott@vorthmann.org)
2018-09-04 21:26:47

not sure... I would think the former is more conventional

jrus (me@jacobrus.com)
2018-09-04 21:27:00

let me check wikipedia

Scott (scott@vorthmann.org)
2018-09-04 21:27:10

or Conway and Smith

Scott (scott@vorthmann.org)
2018-09-04 21:27:25

ok, off to the work account... later

jrus (me@jacobrus.com)
2018-09-04 21:27:32

seems like the former one is typical

jrus (me@jacobrus.com)
2018-09-04 21:27:34

cheers

Scott (scott@vorthmann.org)
2018-09-04 21:27:57

reshared some cleanup... removed all the old float-based renderer stuff

jrus (me@jacobrus.com)
2018-09-04 21:29:15

oh, it also matters what the index convention is for matrices

jrus (me@jacobrus.com)
2018-09-04 21:29:33

and whether they multiply on the right or left

Scott (scott@vorthmann.org)
2018-09-04 22:35:08

yes

Scott (scott@vorthmann.org)
2018-09-04 22:38:54

as long as I've created a Matrix4 with the right indexing

jrus (me@jacobrus.com)
2018-09-04 23:10:22

I think GPUs tend to use different indexing than C code

jrus (me@jacobrus.com)
2018-09-04 23:14:22

@Scott anyway, okay, I spent the extra 5 minutes to finally write this code, after an hour and a half reading picture books

jrus (me@jacobrus.com)
2018-09-04 23:14:36

quat2matrix = function quat2matrix(q) { const [m00, m10, m20] = quatmul(q, quatmul([[0],[1],[0],[0]], quatconj(q))).slice(1); const [m01, m11, m21] = quatmul(q, quatmul([[0],[0],[1],[0]], quatconj(q))).slice(1); const [m02, m12, m22] = quatmul(q, quatmul([[0],[0],[0],[1]], quatconj(q))).slice(1); return [ m00, m01, m02, m10, m11, m12, m20, m21, m22] }

Scott (scott@vorthmann.org)
2018-09-04 23:15:23

so now you can compare against the vZome matrices?

Scott (scott@vorthmann.org)
2018-09-04 23:16:00

yes, conversion in that direction is pretty straightforward

Scott (scott@vorthmann.org)
2018-09-04 23:16:17

I'm less clear on matrix=>quaternion

jrus (me@jacobrus.com)
2018-09-04 23:17:02

I think so, yes

jrus (me@jacobrus.com)
2018-09-04 23:17:13

conversion from matrix to quaternion is a bit trickier

jrus (me@jacobrus.com)
2018-09-04 23:17:26

since matrices have extra degrees of freedom

jrus (me@jacobrus.com)
2018-09-04 23:17:42

so sometimes don't represent a rotation

jrus (me@jacobrus.com)
2018-09-04 23:17:48

or rotation + scaling

jrus (me@jacobrus.com)
2018-09-04 23:18:28

you can e.g. find the matrix SVD

jrus (me@jacobrus.com)
2018-09-04 23:19:29

I'm not exactly sure what the accepted best practice is to convert any arbitrary matrix to the "closest" quaternion

jrus (me@jacobrus.com)
2018-09-04 23:20:35

@Scott just to be clear, what order are your matrices written in?

jrus (me@jacobrus.com)
2018-09-04 23:20:54

do you have the rows grouped?

Scott (scott@vorthmann.org)
2018-09-04 23:22:24

I'm pretty sure each "matrix" is a column of row vectors

Scott (scott@vorthmann.org)
2018-09-04 23:23:18

and I multiply using the matrix on the left and a column vector on the right

Scott (scott@vorthmann.org)
2018-09-04 23:23:32

that's from memory, but I'm 85% confident

jrus (me@jacobrus.com)
2018-09-04 23:23:48

btw, you rotate around a different red strut

Scott (scott@vorthmann.org)
2018-09-04 23:24:01

if you say so

jrus (me@jacobrus.com)
2018-09-04 23:24:03

[which is fine]

jrus (me@jacobrus.com)
2018-09-04 23:27:40

so your single red rotation is for me 4 red rotations and a yellow rotation 🙂

jrus (me@jacobrus.com)
2018-09-04 23:29:52

@Scott oh actually, bleh. you maybe didn't order it that way

jrus (me@jacobrus.com)
2018-09-04 23:30:32

your red rotations maybe aren't all around the same axis

jrus (me@jacobrus.com)
2018-09-04 23:30:54

so I think to imitate your version I need to just explicitly paste in 5 red quats

jrus (me@jacobrus.com)
2018-09-04 23:31:05

[which is also fine]

jrus (me@jacobrus.com)
2018-09-04 23:32:18

oh wait, that's not it

jrus (me@jacobrus.com)
2018-09-04 23:33:01

hm

jrus (me@jacobrus.com)
2018-09-04 23:35:21

actually the story is that your yellow rotations aren't all the same, but depend on which red rotation we are in. maybe I am just multiplying in the wrong order. let me test that.

jrus (me@jacobrus.com)
2018-09-04 23:36:55

that might be it

jrus (me@jacobrus.com)
2018-09-04 23:37:14

@Scott okay I think that works, maybe you want to check. let me publish

Scott (scott@vorthmann.org)
2018-09-04 23:42:11

looking, but I'm having trouble comparing visually with the vprinted output... let me get mine in that format

jrus (me@jacobrus.com)
2018-09-04 23:43:20

oh wait, not quite the same

jrus (me@jacobrus.com)
2018-09-04 23:43:30

still need to get the blues in the right order

jrus (me@jacobrus.com)
2018-09-04 23:44:45

@Scott I think you multiply these things in a different order than the way you order them. so I can't just use a single cartesian_product function

Scott (scott@vorthmann.org)
2018-09-04 23:45:28

that's what I was afraid of

jrus (me@jacobrus.com)
2018-09-04 23:46:00

it's only a couple lines of code to handle. not really a big deal

Scott (scott@vorthmann.org)
2018-09-04 23:46:29

for me, the problem would be figuring out which couple of lines of code!

Scott (scott@vorthmann.org)
2018-09-04 23:47:26

damn, that's awfully close

Scott (scott@vorthmann.org)
2018-09-04 23:48:43

I really need to learn the spread param syntax

jrus (me@jacobrus.com)
2018-09-04 23:52:36

```icosahedralquaternionsscott = { const one = [[1],[0],[0],[0]];
const red = [one, [[0,-1,2],[-1,0,2],[1,-1,2],[0,0,1]]]; for (var i = 2; i < 5; i++) red[i] = quatmul(red[i-1], red[1]); const yellow = [one, [[1,0,2],[1,0,2],[1,0,2],[1,0,2]], [[-1,0,2],[1,0,2],[1,0,2],[1,0,2]]]; const blue = [one, [[0],[1],[0],[0]], [[0],[0],[0],[1]], [[0],[0],[1],[0]]];

const output = [] for (let b = 0; b < 4; b++) { for (let r = 0; r < 5; r++) { for (let y = 0; y < 3; y++) { output.push(quatmul(blue[b], quatmul(yellow[y], red[r]))) } } } return output; }```

jrus (me@jacobrus.com)
2018-09-04 23:52:41

@Scott -^

Scott (scott@vorthmann.org)
2018-09-04 23:54:59

wow

Scott (scott@vorthmann.org)
2018-09-04 23:55:02

well done!

jrus (me@jacobrus.com)
2018-09-04 23:55:32

I don't quite get the ordering of blue rotations 😛

jrus (me@jacobrus.com)
2018-09-04 23:55:51

X, Z, Y

Scott (scott@vorthmann.org)
2018-09-04 23:56:19

there is a logic to it, just not something I can express as math... we'd have to look at the dodec key together

Scott (scott@vorthmann.org)
2018-09-04 23:56:22

and my code

jrus (me@jacobrus.com)
2018-09-04 23:56:30

also the ordering of multiplications B * Y * R is different than the order of loops, B, R, Y

jrus (me@jacobrus.com)
2018-09-04 23:56:49

but it's fine

jrus (me@jacobrus.com)
2018-09-04 23:57:06

we should take VZome thingies and render them out

jrus (me@jacobrus.com)
2018-09-04 23:57:17

not worrying about the rest for now

Scott (scott@vorthmann.org)
2018-09-04 23:57:20

so let me import your quat list

jrus (me@jacobrus.com)
2018-09-04 23:57:33

the cell is icosahedralquaternionsscott

jrus (me@jacobrus.com)
2018-09-04 23:58:20

maybe I should rename it vzome instead of scott

Scott (scott@vorthmann.org)
2018-09-04 23:58:35

sure

Scott (scott@vorthmann.org)
2018-09-04 23:58:38

I need "icosahedralquaternionsscott.map(quat2matrix)"

Scott (scott@vorthmann.org)
2018-09-04 23:59:03

can you export that as vZomeicosahedralquaternions?

Scott (scott@vorthmann.org)
2018-09-04 23:59:14

or I can create it

jrus (me@jacobrus.com)
2018-09-04 23:59:19

icosahedralquaternionsvzome

jrus (me@jacobrus.com)
2018-09-04 23:59:35

mine are quaternions

jrus (me@jacobrus.com)
2018-09-04 23:59:38

you want matrices?

Scott (scott@vorthmann.org)
2018-09-04 23:59:38

no sorry

Scott (scott@vorthmann.org)
2018-09-04 23:59:42

duh

Scott (scott@vorthmann.org)
2018-09-04 23:59:45

I want the quats

jrus (me@jacobrus.com)
2018-09-05 00:00:00

I also printed them out below that other table

Scott (scott@vorthmann.org)
2018-09-05 00:00:27

yes

jrus (me@jacobrus.com)
2018-09-05 00:01:46

At some point I should figure out which red strut you are rotating around

jrus (me@jacobrus.com)
2018-09-05 00:02:57

seems to be the (–φ, –1, 0) direction

Scott (scott@vorthmann.org)
2018-09-05 00:04:57

I think of it as the opposite, but we are probably rotating in the opposite sense

Scott (scott@vorthmann.org)
2018-09-05 00:06:44

https://beta.observablehq.com/d/70a3c92c576398bb#icosahedral_quaternions

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-05 00:06:55

now I'm just working out the 3js quaternion recipe

Scott (scott@vorthmann.org)
2018-09-05 00:07:01

reading the doc

Scott (scott@vorthmann.org)
2018-09-05 00:07:41

3js wants x,y,z,w... is that what we have?

Scott (scott@vorthmann.org)
2018-09-05 00:09:18

if I want "new Quaternion(x,y,z,w)" and I have list=[x,y,z,w], can I do "new Quaternion(...list)" ?

Scott (scott@vorthmann.org)
2018-09-05 00:12:11

looks like it works that way

Scott (scott@vorthmann.org)
2018-09-05 00:12:15

now the moment of truth

jrus (me@jacobrus.com)
2018-09-05 00:13:31

@Scott oh good point, we could flip all the signs on that quaternion and get the same thing

jrus (me@jacobrus.com)
2018-09-05 00:13:55

that makes more sense 🙂

jrus (me@jacobrus.com)
2018-09-05 00:14:19

it was just negative based on the ordering from my other rotations

jrus (me@jacobrus.com)
2018-09-05 00:15:08

@Scott what's the 3JS API?

jrus (me@jacobrus.com)
2018-09-05 00:15:24

putting the scalar at the end is dumb 🙂

jrus (me@jacobrus.com)
2018-09-05 00:15:26

but whatever

Scott (scott@vorthmann.org)
2018-09-05 00:16:47

reshared... we have some orientations, just not quite the right ones 😉

Scott (scott@vorthmann.org)
2018-09-05 00:16:56

https://beta.observablehq.com/d/70a3c92c576398bb

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-05 00:16:59

I think you need to explicitly reorder

Scott (scott@vorthmann.org)
2018-09-05 00:17:08

ok, easy enough

jrus (me@jacobrus.com)
2018-09-05 00:17:18

my quaternions are [w, x, y, z]

Scott (scott@vorthmann.org)
2018-09-05 00:17:54

boom!

Scott (scott@vorthmann.org)
2018-09-05 00:17:57

reshared

Scott (scott@vorthmann.org)
2018-09-05 00:18:00

nailed it

jrus (me@jacobrus.com)
2018-09-05 00:18:25

great

Scott (scott@vorthmann.org)
2018-09-05 00:18:52

now, on to a harder model

jrus (me@jacobrus.com)
2018-09-05 00:19:23

and then at some point down the line making sure it doesn't nail the CPU

jrus (me@jacobrus.com)
2018-09-05 00:19:33

🙂

jrus (me@jacobrus.com)
2018-09-05 00:19:46

I think it just continuously re-renders right?

Scott (scott@vorthmann.org)
2018-09-05 00:20:33

I think so, yes... probably 1/60 sec

jrus (me@jacobrus.com)
2018-09-05 00:20:37

definitely needs to stop doing that until there is actually mouse interaction 🙂

jrus (me@jacobrus.com)
2018-09-05 00:20:52

before I want to use it in a long notebook

Scott (scott@vorthmann.org)
2018-09-05 00:20:56

yup

jrus (me@jacobrus.com)
2018-09-05 00:21:04

but anyway, great work!

Scott (scott@vorthmann.org)
2018-09-05 00:21:34

you too!

Scott (scott@vorthmann.org)
2018-09-05 00:21:40

a nice collaboration

Scott (scott@vorthmann.org)
2018-09-05 00:21:52

grabbed a "sqrtPhi" model, that won't work

Scott (scott@vorthmann.org)
2018-09-05 00:23:33

reshared

Scott (scott@vorthmann.org)
2018-09-05 00:23:41

purple triangles

Scott (scott@vorthmann.org)
2018-09-05 00:24:30

that's a good note to say "good night" on!

jrus (me@jacobrus.com)
2018-09-05 00:26:26

cheers

jrus (me@jacobrus.com)
2018-09-05 00:29:15

maybe I can make a nicer LaTeX print style for matrices here, including pulling out common denominators to put up front

Scott (scott@vorthmann.org)
2018-09-05 00:30:00

cool

jrus (me@jacobrus.com)
2018-09-05 01:19:51
jrus (me@jacobrus.com)
2018-09-05 01:21:00

hammers my cpu though

jrus (me@jacobrus.com)
2018-09-05 01:34:45

okay, I spent the last 15 minutes skimming through random recent observable notebooks; time to sleep. I think we might get best bang-for-the-buck implementing something with d3-drag for mouse interaction

Scott (scott@vorthmann.org)
2018-09-05 07:33:35

Sounds good. We can have it rotate the object group, rather than the camera, and trigger a render

Scott (scott@vorthmann.org)
2018-09-05 08:28:37

3js.OrbitController is certainly smarter about mouse listener attachment, and may be rendering only on change. Just uses the wrong math

jrus (me@jacobrus.com)
2018-09-05 10:31:09

@Scott for of loops are way better ```icosahedralquaternionsvzome = { const o = [0], h = [1,0,2], one = [[1],o,o,o]; const red = [one, [[0,1,2],[1,0,2],[-1,1,2],o]]; for (var i = 2; i < 5; i++) red[i] = quatmul(red[i-1], red[1]); const yellow = [one, [h,h,h,h], [[-1,0,2],h,h,h]]; const blue = [one, [o,[1],o,o], [o,o,o,[1]], [o,o,[1],o]];

const output = []; let b, r, y; for (b of blue) for (r of red) for (y of yellow) output.push(quatmul(b, quatmul(y, r))); return output; }```

jrus (me@jacobrus.com)
2018-09-05 10:33:23

at least for this particular case

jrus (me@jacobrus.com)
2018-09-05 12:56:32

I should stop fiddling with these icosahedral_quaternions_vzome = { const one = [[1],,,], h = [1,,2], blue = [one, [,[1],,], [,,[1],], [,,,[1]]], yellow = [one, [h, h, h, h], [[-1,,2], h, h, h]], red = [one, [[,1,2], h, [-1,1,2],]]; for (let i = 2; i &lt; 5; i++) red[i] = quatmul(red[i-1], red[1]); const output = []; let b, r, y; for (b of blue) for (r of red) for (y of yellow) output.push(quatmul(b, quatmul(y, r))); return output; }

jrus (me@jacobrus.com)
2018-09-05 12:58:40

but I think I like having φ spelled [,1] reasonably well

jrus (me@jacobrus.com)
2018-09-05 12:59:09

or 1/2 spelled [1,,2], etc.

Scott (scott@vorthmann.org)
2018-09-05 14:12:40

ROFL. That's fun... You'll have to explain how it works later

Scott (scott@vorthmann.org)
2018-09-05 14:13:08

Yes, one can learn to read that!

Scott (scott@vorthmann.org)
2018-09-05 14:17:54

So zero is the default for any missing array element?

Scott (scott@vorthmann.org)
2018-09-05 14:18:01

Nice

jrus (me@jacobrus.com)
2018-09-05 17:30:38

@Scott yeah, I just added default [0] and 0s

Scott (scott@vorthmann.org)
2018-09-05 17:32:27

Where do you set that?

jrus (me@jacobrus.com)
2018-09-05 17:32:45

in the definition of quatmul, etc.

Scott (scott@vorthmann.org)
2018-09-05 17:33:47

Ok. The language must define some meaning for just commas, though, right?

Scott (scott@vorthmann.org)
2018-09-05 17:34:07

Nulls between?

jrus (me@jacobrus.com)
2018-09-05 17:34:23

'undefined' I think

Scott (scott@vorthmann.org)
2018-09-05 17:34:37

Oh sure

Scott (scott@vorthmann.org)
2018-09-05 17:35:24

On our way to Lisa's volleyball match... Later

jrus (me@jacobrus.com)
2018-09-05 17:37:52

oh maybe I should be careful. It seems that array.map() just skips over undefined stuff

jrus (me@jacobrus.com)
2018-09-05 17:38:48

but also leaves an undefined space in the output array

jrus (me@jacobrus.com)
2018-09-05 17:39:03

irrespective of what the map is supposed to do with the values

jrus (me@jacobrus.com)
2018-09-05 17:39:50

e.g. [,,2,,5].map(x=>'?') produces [,,'?',,'?']

Scott (scott@vorthmann.org)
2018-09-05 17:39:53

Some normalization function called for?

jrus (me@jacobrus.com)
2018-09-05 17:39:58

yeah maybe

jrus (me@jacobrus.com)
2018-09-05 17:43:19

apparently if I get the .values() that explicitly includes 'undefined' entries, instead of just being empty

jrus (me@jacobrus.com)
2018-09-05 20:06:43

@Scott okay, I made the matrices print prettier https://beta.observablehq.com/@jrus/zome-arithmetic#quat2matrix

Scott (scott@vorthmann.org)
2018-09-05 20:12:01

yes, very nice

Scott (scott@vorthmann.org)
2018-09-05 20:14:03

oh, I like the BRY indices!

jrus (me@jacobrus.com)
2018-09-05 20:18:24

anyway, enough of this nonsense. I should figure out something useful to do

jrus (me@jacobrus.com)
2018-09-05 20:18:36

@Scott anything I can help you with?

Scott (scott@vorthmann.org)
2018-09-05 20:22:53

feel free to do anything you like... there are lots of refinements we can make to the 3JS code, even just syntactic ones

Scott (scott@vorthmann.org)
2018-09-05 20:23:06

certainly perf improvements there like buffering

Scott (scott@vorthmann.org)
2018-09-05 20:23:14

better trackball

Scott (scott@vorthmann.org)
2018-09-05 20:23:22

all pretty pedestrian, though

jrus (me@jacobrus.com)
2018-09-05 20:23:35

okay. maybe I should go work on paper for a bit. I don't have an immediate goal

Scott (scott@vorthmann.org)
2018-09-05 20:24:14

think about bridging the gap between your segment set and something analogous to VSON... orbit, orientation, length all resolved

jrus (me@jacobrus.com)
2018-09-05 20:24:46

ah right, we need to resolve the orientation

Scott (scott@vorthmann.org)
2018-09-05 20:25:12

start with what we can do easily... we can render struts in the wrong direction, better than nothing

Scott (scott@vorthmann.org)
2018-09-05 20:25:27

you have an orbit finder, largely... length is just division

Scott (scott@vorthmann.org)
2018-09-05 20:25:36

make a VSON with all orientations == 0

jrus (me@jacobrus.com)
2018-09-05 20:25:38

length is slightly tricky

Scott (scott@vorthmann.org)
2018-09-05 20:25:43

yes, a little

jrus (me@jacobrus.com)
2018-09-05 20:25:51

I think the thing to do is get the quadrances

Scott (scott@vorthmann.org)
2018-09-05 20:25:53

vZome has unit lengths per orbit

Scott (scott@vorthmann.org)
2018-09-05 20:25:57

yes

jrus (me@jacobrus.com)
2018-09-05 20:26:06

divide, and then either (a) figure out how to square root

jrus (me@jacobrus.com)
2018-09-05 20:26:09

or (b) just use floats

Scott (scott@vorthmann.org)
2018-09-05 20:26:15

noooooo!

Scott (scott@vorthmann.org)
2018-09-05 20:26:17

😉

Scott (scott@vorthmann.org)
2018-09-05 20:26:27

vZome can do it exactly, so can you, cleaner

jrus (me@jacobrus.com)
2018-09-05 20:26:59

I mean, we can get the relative quadrances between the prototype and the actual struts

Scott (scott@vorthmann.org)
2018-09-05 20:27:13

I should review the vZome code... been a while

jrus (me@jacobrus.com)
2018-09-05 20:27:15

does that thing have to be a perfect square?

Scott (scott@vorthmann.org)
2018-09-05 20:27:28

let's start with just orbits... render struts the wrong length

jrus (me@jacobrus.com)
2018-09-05 20:27:28

I guess so

Scott (scott@vorthmann.org)
2018-09-05 20:28:04

may need to run Lia back to school... TBD

jrus (me@jacobrus.com)
2018-09-05 20:28:08

so what's the best algorithm for taking the square root of a known-perfect-square algebraic rational?

Scott (scott@vorthmann.org)
2018-09-05 20:28:09

left her backpack

Scott (scott@vorthmann.org)
2018-09-05 20:28:45

I don't think you need to go there... I believe vZome does it by getting the vectors parallel, then comparing some nonzero coordinate of each

Scott (scott@vorthmann.org)
2018-09-05 20:29:12

guaranteed that one of the three coordinates will be nonzero

Scott (scott@vorthmann.org)
2018-09-05 20:30:00

just division then

jrus (me@jacobrus.com)
2018-09-05 20:31:06

that doesn't help you if they aren't an integer multiple

jrus (me@jacobrus.com)
2018-09-05 20:31:27

oh nevermind

jrus (me@jacobrus.com)
2018-09-05 20:31:33

I'm not sure what I'm talking about

jrus (me@jacobrus.com)
2018-09-05 20:31:41

duh you are right

Scott (scott@vorthmann.org)
2018-09-05 20:31:45

had me going...

jrus (me@jacobrus.com)
2018-09-05 20:32:09

okay, good point, we can just divide 🙂

Scott (scott@vorthmann.org)
2018-09-05 20:32:10

it is a bit of a relief when you make the occasional error... like you're trying to pass a Turing test 😉

Scott (scott@vorthmann.org)
2018-09-05 20:32:23

normally I can't keep up

jrus (me@jacobrus.com)
2018-09-05 20:32:26

oh I make tons of errors all the time

jrus (me@jacobrus.com)
2018-09-05 20:32:37

I just am good at speaking confusingly

Scott (scott@vorthmann.org)
2018-09-05 20:35:12

Once we have segment-set => VSON, we can start going crazy with all sorts of functions to generate objects from code

Scott (scott@vorthmann.org)
2018-09-05 20:35:53

it is basically the guts of vZome... with API instead of pre-built commands

jrus (me@jacobrus.com)
2018-09-05 20:36:06

right

jrus (me@jacobrus.com)
2018-09-05 20:36:19

and also an ability to display several models serially down a page

jrus (me@jacobrus.com)
2018-09-05 20:36:33

which I think is also an interesting way to work

Scott (scott@vorthmann.org)
2018-09-05 20:36:38

we can do that now, but they'll all spin with the single trackball!

Scott (scott@vorthmann.org)
2018-09-05 20:36:45

and zoom and pan

jrus (me@jacobrus.com)
2018-09-05 20:36:47

I don't mind them all spinning

jrus (me@jacobrus.com)
2018-09-05 20:36:54

I do mind them all spinning the CPU incessantly 😛

Scott (scott@vorthmann.org)
2018-09-05 20:36:59

yes

jrus (me@jacobrus.com)
2018-09-05 20:37:11

sometimes you might want them to all spin together

jrus (me@jacobrus.com)
2018-09-05 20:37:24

I suspect that webgl can update just the camera without doing that much work

Scott (scott@vorthmann.org)
2018-09-05 20:37:25

you could try switching back to 3js orbitcontrols... I don't think it insists on the animate loop

Scott (scott@vorthmann.org)
2018-09-05 20:37:56

it would give us a framework to build on, get the mouse listeners and generators right, then swap out the math

jrus (me@jacobrus.com)
2018-09-05 20:38:26

I want to at some point play around more with d3-drag for mouse stuff

jrus (me@jacobrus.com)
2018-09-05 20:38:45

or maybe there's a better thing

Scott (scott@vorthmann.org)
2018-09-05 20:38:53

it's all good... whatever keeps you energized is fine with me

jrus (me@jacobrus.com)
2018-09-05 20:38:56

dealing with browser APIs is a pain

jrus (me@jacobrus.com)
2018-09-05 20:39:11

mouse handling is always the hardest part of any UI work I have tried to do

Scott (scott@vorthmann.org)
2018-09-05 20:39:16

yes... dealing with libraries in general is, often

Scott (scott@vorthmann.org)
2018-09-05 20:39:19

indeed

Scott (scott@vorthmann.org)
2018-09-05 20:39:33

why I ended up with the goofy approach in vZome!

Scott (scott@vorthmann.org)
2018-09-05 20:39:42

(lights attached to the camera)

jrus (me@jacobrus.com)
2018-09-05 20:39:47

not the basic logic of the mouse handling, but just figuring out data flow, getting the edge cases to not break, etc.

Scott (scott@vorthmann.org)
2018-09-05 20:39:54

ya

jrus (me@jacobrus.com)
2018-09-05 20:40:12

I am still not sure what to do when I want to e.g. put a bunch of selectable stuff on screen

jrus (me@jacobrus.com)
2018-09-05 20:40:21

and keep some state about the selection

jrus (me@jacobrus.com)
2018-09-05 20:40:37

draw extra elements based on the selection

jrus (me@jacobrus.com)
2018-09-05 20:40:59

for instance, if I wanted to make an editable bezier spline tool, like Illustrator or whatever

jrus (me@jacobrus.com)
2018-09-05 20:41:43

where you click a path and see all the knots. then click a knot to see extra handles. with the ability to drag the whole path, or just drag one knot, or a selected group of knots, ...

jrus (me@jacobrus.com)
2018-09-05 20:42:08

figuring out what state to store and how is a pain

Scott (scott@vorthmann.org)
2018-09-05 21:26:54

yeah... one reason I feel good about React+Redux. It really simplifies how to think about that

Scott (scott@vorthmann.org)
2018-09-05 21:29:28

Though it is a bit slanted toward typical vanilla data (rather than cool mathematical objects), I really liked this: https://reactjs.org/docs/thinking-in-react.html

reactjs.org
Scott (scott@vorthmann.org)
2018-09-05 21:30:38

I have not yet figured out how to meld React and Observable, conceptually. Shouldn't be too hard

Scott (scott@vorthmann.org)
2018-09-05 22:21:38

wha?... my rendering of 60 spruce struts worked last night, but tonight they are not connecting up. Did you reorder in the process of playing today?

jrus (me@jacobrus.com)
2018-09-05 22:21:46

uh oh

jrus (me@jacobrus.com)
2018-09-05 22:22:03

let me poke around. it's possible I broke it

Scott (scott@vorthmann.org)
2018-09-05 22:22:04

do you still have the side-by-side?

jrus (me@jacobrus.com)
2018-09-05 22:22:15

I'll put it back in

Scott (scott@vorthmann.org)
2018-09-05 22:22:20

check my notebook... a good test case 😉

Scott (scott@vorthmann.org)
2018-09-05 22:22:29

https://beta.observablehq.com/d/70a3c92c576398bb

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-05 22:23:58

good in the sense of immediately signaling failure

jrus (me@jacobrus.com)
2018-09-05 22:26:09

crap somehow I did. let me figure it out

jrus (me@jacobrus.com)
2018-09-05 22:26:48

@Scott whoops

jrus (me@jacobrus.com)
2018-09-05 22:26:55

I swapped the order of the blue quaternions again

jrus (me@jacobrus.com)
2018-09-05 22:27:02

from i, k, j to i, j, k

jrus (me@jacobrus.com)
2018-09-05 22:27:09

in copy/pasting that line from the other cell

jrus (me@jacobrus.com)
2018-09-05 22:27:37

@Scott try importing again

jrus (me@jacobrus.com)
2018-09-05 22:27:45

i.e. re-evaluate the import cell

jrus (me@jacobrus.com)
2018-09-05 22:29:44

@Scott sorry for the regression there

Scott (scott@vorthmann.org)
2018-09-05 22:31:19

Ok. Computer crashed. Will try in a minute

jrus (me@jacobrus.com)
2018-09-05 22:31:24

😕

Scott (scott@vorthmann.org)
2018-09-05 22:31:51

Crash not your fault😄

jrus (me@jacobrus.com)
2018-09-05 22:32:43

well sure but still

Scott (scott@vorthmann.org)
2018-09-05 22:40:30

Yes, back to normal

Scott (scott@vorthmann.org)
2018-09-05 22:40:33

Thank you

jrus (me@jacobrus.com)
2018-09-05 22:40:48

sorry for the silliness

Scott (scott@vorthmann.org)
2018-09-05 22:42:31

np

Scott (scott@vorthmann.org)
2018-09-05 22:43:48

I made a fork and disabled the trackball/animation loop... CPU idles normally. There is nothing inherently abusive about 3JS, so we can certainly make it well-behaved, even for multiple canvases

Scott (scott@vorthmann.org)
2018-09-05 22:47:39

The TrackballControls class seems to require this sort of behavior:

Scott (scott@vorthmann.org)
2018-09-05 22:47:51
Scott (scott@vorthmann.org)
2018-09-05 22:48:15

Clearly evil... render each tick, regardless of whether there was actually any update

Scott (scott@vorthmann.org)
2018-09-05 22:48:47

I'll switch back to OrbitControls. I imagine we'd rather have a clunky interface that does not peg the CPU

jrus (me@jacobrus.com)
2018-09-05 22:49:01

hm

jrus (me@jacobrus.com)
2018-09-05 22:49:10

that seems weird

Scott (scott@vorthmann.org)
2018-09-05 22:49:29

OrbitControls is just better-written, I think... they are all contributed examples

Scott (scott@vorthmann.org)
2018-09-05 22:49:47

could be that mrdoob himself wrote that one, or someone equally adept

Scott (scott@vorthmann.org)
2018-09-05 22:51:31

Your bug was actually fun... I knew instantly what had happened (though not in precise terms).

jrus (me@jacobrus.com)
2018-09-05 22:53:03

half the zones would have been swapped (one quarter with the other quarter); instead of doing one 180° rotation, you get a different one

Scott (scott@vorthmann.org)
2018-09-05 22:56:46

yeah, it just looked like chaos

Scott (scott@vorthmann.org)
2018-09-05 22:57:13

doesn't take much broken symmetry for your eye to see "no symmetry!"

Scott (scott@vorthmann.org)
2018-09-05 22:59:34

OK, I was right... well-behaved mouse listening

Scott (scott@vorthmann.org)
2018-09-05 22:59:37

controls.addEventListener("change", () => renderer.render(scene, camera));

Scott (scott@vorthmann.org)
2018-09-05 22:59:48

reshared

jrus (me@jacobrus.com)
2018-09-05 23:00:46

@Scott one nice thing about d3-drag is that it will keep working as the mouse moves outside the page, etc.

jrus (me@jacobrus.com)
2018-09-05 23:01:37

this one is definitely better than the other mouse control, even if it has a stupid north pole always up feature

jrus (me@jacobrus.com)
2018-09-05 23:01:45

for one thing, the other one is not sensitive enough

jrus (me@jacobrus.com)
2018-09-05 23:02:36

I'm not sure whether it is better for mouse actions to depend on initial mouse position or only relative movement

Scott (scott@vorthmann.org)
2018-09-05 23:03:44

gain is easy to tweak, of course

Scott (scott@vorthmann.org)
2018-09-05 23:03:51

I always go for relative only

Scott (scott@vorthmann.org)
2018-09-05 23:04:00

I hate the absolute ones vehemently

jrus (me@jacobrus.com)
2018-09-05 23:04:09

I suspect I will like the absolute one better

Scott (scott@vorthmann.org)
2018-09-05 23:04:13

but I'm open minded to try your ideas about S3

jrus (me@jacobrus.com)
2018-09-05 23:04:18

if implemented right

Scott (scott@vorthmann.org)
2018-09-05 23:04:51

drag outside the canvas or page is definitely a plus

Scott (scott@vorthmann.org)
2018-09-05 23:07:20

I'll fork OrbitControls and play with the math

Scott (scott@vorthmann.org)
2018-09-05 23:30:03

ha, I knew it. OrbitControls authored by mrdoob and alteredqualia... rock stars

Scott (scott@vorthmann.org)
2018-09-05 23:30:12

and 3 others

Scott (scott@vorthmann.org)
2018-09-06 00:21:43

OK, the CPU peg was my stupidity, not anyone else's. Refreshed... check it out.

Scott (scott@vorthmann.org)
2018-09-06 00:21:56

reshared, I mean

Scott (scott@vorthmann.org)
2018-09-06 00:22:24

Still cannot get it to rotate and pan on the canvas only, sorry.

Scott (scott@vorthmann.org)
2018-09-06 22:32:38

I realized that I'm not approaching this correctly. The renderer code itself is doing the conversion to one-divisor rationals. That means we can't feed it one-divisor rationals to start with.

Scott (scott@vorthmann.org)
2018-09-06 22:32:44

Doing some refactoring.

jrus (me@jacobrus.com)
2018-09-06 22:45:44

oh howdy

jrus (me@jacobrus.com)
2018-09-06 22:46:02

I haven't done anything especially useful today

jrus (me@jacobrus.com)
2018-09-06 22:46:14

lot of time at the playground though 🙂

Scott (scott@vorthmann.org)
2018-09-06 22:57:46

good

Scott (scott@vorthmann.org)
2018-09-06 22:58:18

so I'm going to just define a function that "cleans up" a VSON model, normalizing the numbers to one-divisor

Scott (scott@vorthmann.org)
2018-09-06 22:58:29

so the renderer can just assume the normalized format

jrus (me@jacobrus.com)
2018-09-06 22:59:00

@Scott you might also just want to directly put the list of 60 quaternions in your notebook 🙂

jrus (me@jacobrus.com)
2018-09-06 22:59:15

instead of having an external dependency

jrus (me@jacobrus.com)
2018-09-06 23:02:18

quaternions = [ [[1,0,1],[0,0,1],[0,0,1],[0,0,1]], [[1,0,2],[1,0,2],[1,0,2],[1,0,2]], [[-1,0,2],[1,0,2],[1,0,2],[1,0,2]], [[0,1,2],[1,0,2],[-1,1,2],[0,0,1]], [[0,0,1],[1,0,2],[0,1,2],[-1,1,2]], [[0,-1,2],[0,0,1],[1,0,2],[-1,1,2]], [[-1,1,2],[0,1,2],[1,0,2],[0,0,1]], [[-1,0,2],[-1,1,2],[0,1,2],[0,0,1]], [[0,-1,2],[-1,0,2],[-1,1,2],[0,0,1]], [[1,-1,2],[0,1,2],[1,0,2],[0,0,1]], [[0,-1,2],[0,0,1],[1,0,2],[1,-1,2]], [[-1,0,2],[0,-1,2],[0,0,1],[1,-1,2]], [[0,-1,2],[1,0,2],[-1,1,2],[0,0,1]], [[0,-1,2],[1,-1,2],[0,0,1],[-1,0,2]], [[0,0,1],[0,-1,2],[1,-1,2],[-1,0,2]], [[0,0,1],[1,0,1],[0,0,1],[0,0,1]], [[-1,0,2],[1,0,2],[-1,0,2],[1,0,2]], [[-1,0,2],[-1,0,2],[-1,0,2],[1,0,2]], [[-1,0,2],[0,1,2],[0,0,1],[-1,1,2]], [[-1,0,2],[0,0,1],[1,-1,2],[0,1,2]], [[0,0,1],[0,-1,2],[1,-1,2],[1,0,2]], [[0,-1,2],[-1,1,2],[0,0,1],[1,0,2]], [[1,-1,2],[-1,0,2],[0,0,1],[0,1,2]], [[1,0,2],[0,-1,2],[0,0,1],[-1,1,2]], [[0,-1,2],[1,-1,2],[0,0,1],[1,0,2]], [[0,0,1],[0,-1,2],[-1,1,2],[1,0,2]], [[0,1,2],[-1,0,2],[-1,1,2],[0,0,1]], [[-1,0,2],[0,-1,2],[0,0,1],[-1,1,2]], [[-1,1,2],[0,-1,2],[1,0,2],[0,0,1]], [[0,1,2],[0,0,1],[1,0,2],[1,-1,2]], [[0,0,1],[0,0,1],[0,0,1],[1,0,1]], [[-1,0,2],[-1,0,2],[1,0,2],[1,0,2]], [[-1,0,2],[-1,0,2],[1,0,2],[-1,0,2]], [[0,0,1],[1,-1,2],[1,0,2],[0,1,2]], [[1,-1,2],[0,-1,2],[1,0,2],[0,0,1]], [[1,-1,2],[-1,0,2],[0,0,1],[0,-1,2]], [[0,0,1],[-1,0,2],[0,1,2],[-1,1,2]], [[0,0,1],[0,-1,2],[-1,1,2],[-1,0,2]], [[0,0,1],[1,-1,2],[-1,0,2],[0,-1,2]], [[0,0,1],[-1,0,2],[0,1,2],[1,-1,2]], [[-1,1,2],[-1,0,2],[0,0,1],[0,-1,2]], [[-1,1,2],[0,0,1],[0,-1,2],[-1,0,2]], [[0,0,1],[1,-1,2],[1,0,2],[0,-1,2]], [[1,0,2],[0,0,1],[1,-1,2],[0,-1,2]], [[1,0,2],[-1,1,2],[0,-1,2],[0,0,1]], [[0,0,1],[0,0,1],[1,0,1],[0,0,1]], [[-1,0,2],[1,0,2],[1,0,2],[-1,0,2]], [[-1,0,2],[1,0,2],[-1,0,2],[-1,0,2]], [[1,-1,2],[0,0,1],[0,1,2],[-1,0,2]], [[0,-1,2],[-1,1,2],[0,0,1],[-1,0,2]], [[-1,0,2],[-1,1,2],[0,-1,2],[0,0,1]], [[-1,0,2],[0,0,1],[-1,1,2],[0,-1,2]], [[0,-1,2],[0,0,1],[-1,0,2],[1,-1,2]], [[1,-1,2],[0,0,1],[0,-1,2],[1,0,2]], [[-1,0,2],[0,0,1],[1,-1,2],[0,-1,2]], [[-1,0,2],[1,-1,2],[0,-1,2],[0,0,1]], [[0,0,1],[1,-1,2],[-1,0,2],[0,1,2]], [[1,-1,2],[0,0,1],[0,-1,2],[-1,0,2]], [[0,0,1],[-1,0,2],[0,-1,2],[-1,1,2]], [[-1,1,2],[-1,0,2],[0,0,1],[0,1,2]] ]

Scott (scott@vorthmann.org)
2018-09-06 23:03:35

sure

Scott (scott@vorthmann.org)
2018-09-06 23:37:48

OK, reshared https://beta.observablehq.com/d/70a3c92c576398bb

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-06 23:38:39

see blue_struts... 60 (overlapping) blue struts, generated from a single blue vector

jrus (me@jacobrus.com)
2018-09-06 23:38:51

cool

Scott (scott@vorthmann.org)
2018-09-06 23:40:19

now switched to lifelike

Scott (scott@vorthmann.org)
2018-09-06 23:40:50

of course blue_struts is a total cheat, since I know the orientation of each strut that I generate

jrus (me@jacobrus.com)
2018-09-06 23:42:16

I think the lifelike one is busier than I'll want for many purposes

jrus (me@jacobrus.com)
2018-09-06 23:42:19

looks nice though

jrus (me@jacobrus.com)
2018-09-06 23:42:25

just needs lighting 🙂

jrus (me@jacobrus.com)
2018-09-06 23:42:40

does 3js do shadows?

Scott (scott@vorthmann.org)
2018-09-06 23:45:57

yes, but I think it is just a trick... not sure it would work for something so high-genus

Scott (scott@vorthmann.org)
2018-09-06 23:46:09

never tried it

Scott (scott@vorthmann.org)
2018-09-06 23:46:45

one advantage of a headlamp... it banishes the shadows that we can't really render anyway 😉

Scott (scott@vorthmann.org)
2018-09-06 23:48:28

I'm off to bed... lots of ideas spinning

Scott (scott@vorthmann.org)
2018-09-06 23:48:29

gnight

jrus (me@jacobrus.com)
2018-09-06 23:48:32

cheers

jrus (me@jacobrus.com)
2018-09-06 23:48:37

I'll try to figure out

jrus (me@jacobrus.com)
2018-09-06 23:48:44

the orientation thingy

jrus (me@jacobrus.com)
2018-09-06 23:49:04

@Scott one way to do it is to just divide the vectors

jrus (me@jacobrus.com)
2018-09-06 23:49:18

that gives you the square of the quaternion of the rotation

jrus (me@jacobrus.com)
2018-09-06 23:49:35

so you can just square all the rotation quaternions, and then do a lookup

jrus (me@jacobrus.com)
2018-09-06 23:50:04

oh maybe that won't work

jrus (me@jacobrus.com)
2018-09-06 23:51:39

I think that would only be if the rotation was in the plane between the vectors directly. let me think about it

jrus (me@jacobrus.com)
2018-09-06 23:52:51

@Scott the "easy" way is to just do repeatedly chop the search space in half by doing tests against planes, and then have a map from the results of those tests -> orientations

jrus (me@jacobrus.com)
2018-09-06 23:53:29

and then can save time by caching any vectors that actually get used in a model

jrus (me@jacobrus.com)
2018-09-07 11:30:02

cute https://www.youtube.com/watch?v=8rqBFvm2lME

YouTube
} Jason Hise (https://www.youtube.com/channel/UCw5aOpkU7_uuL73-kVxdJIA)
jrus (me@jacobrus.com)
2018-09-07 12:12:52

@Scott okay, I thought about it a bit, and I think the easiest way to find the 'orientation' is to use my same code to find the 'orbit', but record the signs along the way before I get rid of them. Each bit pattern (with some unused, and some aliasing in the case of zeros) will represent one original orientation. There were 3 + 2 + 2 + 1 = 8 bits involved (8 reflections to get every triangle on the sphere down onto one triangle), so if we want we can just use a small array of 8-bit numbers.

jrus (me@jacobrus.com)
2018-09-07 12:14:02

Only 120 of the 256 bit patterns will actually get used; we can leave the rest of the array full of zeros or whatever

jrus (me@jacobrus.com)
2018-09-07 12:16:19

Or instead of using an array of numbers, can directly use an array where the entries are a pair of [quaternion, reflectionbit], with reflectionbit = true meaning an improper rotation

jrus (me@jacobrus.com)
2018-09-07 12:16:58

depends whether you care about depending on some externally decided ordering of the rotations (e.g. vzome's)

jrus (me@jacobrus.com)
2018-09-07 12:17:14

jrus (me@jacobrus.com)
2018-09-07 12:19:18

remember what we did for the 'orbit' code was (1) take the absolute value of each coordinate [3 bits], (2) rotate around a red direction and take the absolute value again [2 bits, because one coordinate will always still be zero], (3) rotate around a red direction again and take the absolute value again [2 bits], check which side of the kite we are on and optionally reflect across a red-yellow great circle [1 bit]

Scott (scott@vorthmann.org)
2018-09-07 12:20:16

It is easy to store a single permutation that maps jrus induces to vZome indices, and apply the at the moment of rendering

jrus (me@jacobrus.com)
2018-09-07 12:20:39

to figure out the association between quaternions and bit patterns, we can just take an orbit in the middle of the canonical triangle, apply each of the 60 quaternions, and record the bit pattern

Scott (scott@vorthmann.org)
2018-09-07 12:21:27

I was thinking of that too... In more vague terms

jrus (me@jacobrus.com)
2018-09-07 12:21:31

and also want to combine the quaternion with a reflection across the origin and do it again, for the other 60 possibilities

jrus (me@jacobrus.com)
2018-09-07 12:22:11

this provides yet another (pretty arbitrary) numbering for the symmetries of the icosahedron

jrus (me@jacobrus.com)
2018-09-07 12:22:24

each triangle gets a number from 0–255

jrus (me@jacobrus.com)
2018-09-07 12:23:15

anyway, time to put together some animal puzzles

jrus (me@jacobrus.com)
2018-09-07 12:23:19

catch you in a while

Scott (scott@vorthmann.org)
2018-09-07 12:23:26

True. Later

jrus (me@jacobrus.com)
2018-09-07 14:25:58

@Scott okay I think I mostly have this code debugged, but there are a few bits I'm still confused about

jrus (me@jacobrus.com)
2018-09-07 14:26:33

it's pretty ugly though

jrus (me@jacobrus.com)
2018-09-07 14:26:36

```orbit2 = { // return an array of [a < 0, abs(a)] const lt0abs = function lt0abs(a) { const [a0=0, a1=0, ad=1] = a, float = a0 + PHI * a1, sign = ((ad>0)-(ad<0)) * ((float>0)-(float<0)); return [+(sign < 0), [a0 * sign, a1 * sign, ad]]; }

const v = [[-1, 1], [-1], [0, -1]]; // φ⁻ -1 -φ return function orbit2(u) { // Reduce to the 'kite' shape at the corner of one octant: const bits = (new Array(8)).fill(0); u.slice(); [bits[0], u[0]] = lt0abs(u[0]); [bits[1], u[1]] = lt0abs(u[1]); [bits[2], u[2]] = lt0abs(u[2]); bits[1] ^= bits[0]; bits[2] ^= bits[0]; // make sure reflections have the same lower-order bits. u = transform(redrotation, u); [bits[3], u[1]] = lt0abs(u[1]), [bits[4], u[2]] = lt0abs(u[2]); u = transform(redrotation, u); [bits[5], u[1]] = lt0abs(u[1]); [bits[6], u[2]] = lt0_abs(u[2]);

// Now reflect the top triangle of the kite onto the bottom triangle:
let d = dot(u, v), ds = +grgreater([0], d); bits[7] = ds;
d = grmul([-ds, 0, 2], d); u = vectoradd(u, scalarmul(d, v));

// Now return rational coordinates of a gnomonic (tangent) projection.
// return scalarmul(grinv(u[0]), [u[1], u[2]]);
return bits.reduce((a, b) =&gt; (a &lt;&lt; 1) + b)

} }```

jrus (me@jacobrus.com)
2018-09-07 14:45:22

@Scott the prototypes for different struts are largely not normalized to the same canonical triangle, right?

jrus (me@jacobrus.com)
2018-09-07 14:46:21

It's also not clear to me how you chose the canonical lengths

jrus (me@jacobrus.com)
2018-09-07 15:06:36

@Scott so okay, given 2 endpoints, what info do I need to generate so you can render a strut?

jrus (me@jacobrus.com)
2018-09-07 15:08:56

I think we need (1) orbit, (2) orientation [rotation and also reflection?], (3) scale vs. a prototype strut

jrus (me@jacobrus.com)
2018-09-07 15:30:21

@Scott how much problem would it be to require the prototype struts to all be in the same canonical triangle between blue (1, 0, 0), yellow (1, 0, φ⁻²), red (1, φ⁻, 0) ?

jrus (me@jacobrus.com)
2018-09-07 15:33:56

I guess it doesn't have to be that way; just if it isn’t then we need to look up what orientation the prototype strut does have, and rotate the given strut twice to get there so we can compare lengths

jrus (me@jacobrus.com)
2018-09-07 15:38:32

woo, naptime!

jrus (me@jacobrus.com)
2018-09-07 15:56:56

okay cleaned this up a little ```orbit2 = { // Return (a < 0); as a side effect, change a to abs(a), in place. const lt0abs = function lt0abs(a) { const float = a[0] + PHI * a[1], sign = ((float>0)-(float<0)); a[0] *= sign; a[1] **= sign; return +(sign < 0); }

const v = [[-1, 1], [-1], [0, -1]]; // φ⁻ -1 -φ

return function orbit2(u) { u = [[...u[0]], [...u[1]], [...u[2]]]; // make a deep copy of 'u'.

// Reduce to the 'kite' shape at the corner of one octant:
const bits = [lt0_abs(u[0]), lt0_abs(u[1]), lt0_abs(u[2])];
bits[1] ^= bits[0]; bits[2] ^= bits[0]; // make sure reflections have the same lower-order bits.
u = transform(red_rotation, u); bits.push(lt0_abs(u[1]), lt0_abs(u[2]));
u = transform(red_rotation, u); bits.push(lt0_abs(u[1]), lt0_abs(u[2]));

// Now reflect the top triangle of the kite onto the bottom triangle:
let d = dot(u, v), ds = +grgreater([0], d); bits.push(ds);
d = grmul([-ds, 0, 2], d); u = vectoradd(u, scalarmul(d, v));

// Now return rational coordinates of a gnomonic (tangent) projection.
// return scalarmul(grinv(u[0]), [u[1], u[2]]);
return bits.reduce((a, b) =&gt; (a &lt;&lt; 1) + b);

} }```

Scott (scott@vorthmann.org)
2018-09-07 16:12:22

I have a mechanism in vZome to canonicalize struts in that fashion. Many of the prototypes were historically defined without regard to this question... Likewise the lengths. I agree we should have new code work only with canonical definitions, whether it be orientations, lengths, prototypes, or whatever. I will change the VSON exporter to align. The only thing I'm really concerned about preserving is orbit names and colors. Other than that, let's not let past mistakes weigh us down. We are defining a new model interchange format, with decoupled shapes.

jrus (me@jacobrus.com)
2018-09-07 16:13:09

@Scott well the easiest would be to make the canonical lengths always be coordinates (1, a, b)

jrus (me@jacobrus.com)
2018-09-07 16:13:23

but that is going to add unnecessary denominators you might not really want

jrus (me@jacobrus.com)
2018-09-07 16:13:57

but the nice thing about it would be that finding the relative length is super easy. just rotate any arbitrary strut to be in the canonical triangle and then look at the x coordinate

jrus (me@jacobrus.com)
2018-09-07 16:14:40

it's not that much harder to just use any arbitrary length within that triangle. then to find relative lengths just divide the x coordinates

jrus (me@jacobrus.com)
2018-09-07 16:15:39

it would certainly be possible as an alternative to use an arbitrary direction, and just make sure to rotate both struts to the canonical direction before dividing

jrus (me@jacobrus.com)
2018-09-07 16:16:06

@Scott I think I'm going to normalize all the quaternions to have positive scalar component

Scott (scott@vorthmann.org)
2018-09-07 16:16:49

I'll think about it. The "usable unit" is already decoupled in vZome, so I may have the freedom. I have always preferred to define orbits with "nice" coordinates... Like 1,1,1 for yellow, though I don't think I use that, actually

jrus (me@jacobrus.com)
2018-09-07 16:17:31

there's nothing wrong with [1,1,1] for yellow... except that it isn't near [1,0,0]

Scott (scott@vorthmann.org)
2018-09-07 16:17:39

Right

Scott (scott@vorthmann.org)
2018-09-07 16:27:56

Let's talk tonight. You're giving me lots of ideas.

jrus (me@jacobrus.com)
2018-09-07 16:28:22

sure

jrus (me@jacobrus.com)
2018-09-07 16:35:28

here are the quaternions for each bit string coming from my code:

000 [[-1,1,2],[0,-1,2],[-1,0,2],[0,0,1]] 001 002 [[0,0,1],[1,0,2],[0,-1,2],[1,-1,2]] 003 [[0,1,2],[-1,0,2],[1,-1,2],[0,0,1]] 004 [[1,0,2],[0,0,1],[-1,1,2],[0,-1,2]] 005 [[1,0,2],[1,0,2],[1,0,2],[1,0,2]] 006 [[0,1,2],[-1,1,2],[0,0,1],[1,0,2]] 007 008 009 010 [[[1,0,1],[0,0,1],[0,0,1],[0,0,1]] 011 [[0,0,1],[-1,1,2],[-1,0,2],[0,-1,2]] 012 013 014 015 016 [[1,0,2],[1,-1,2],[0,1,2],[0,0,1]] 017 [[1,0,2],[-1,0,2],[-1,0,2],[-1,0,2]] 018 [[0,0,1],[0,1,2],[-1,1,2],[1,0,2]] 019 [[-1,1,2],[0,0,1],[0,1,2],[-1,0,2]] 020 [[0,1,2],[0,0,1],[-1,0,2],[-1,1,2]] 021 022 [[-1,1,2],[1,0,2],[0,0,1],[0,-1,2]] 023 024 025 026 027 [[1,0,2],[0,1,2],[0,0,1],[-1,1,2]] 028 029 030 031 032 [[0,0,1],[1,0,2],[0,-1,2],[-1,1,2]] 033 034 [[-1,1,2],[0,1,2],[1,0,2],[0,0,1]] 035 [[0,0,1],[-1,1,2],[-1,0,2],[0,1,2]] 036 [[0,1,2],[1,-1,2],[0,0,1],[1,0,2]] 037 [[1,0,2],[1,0,2],[-1,0,2],[-1,0,2]] 038 [[1,0,2],[0,0,1],[1,-1,2],[0,-1,2]] 039 040 041 042 [[0,0,1],[0,0,1],[0,0,1],[1,0,1]] 043 [[0,1,2],[1,0,2],[-1,1,2],[0,0,1]] 044 045 046 047 048 [[0,0,1],[0,1,2],[-1,1,2],[-1,0,2]] 049 [[1,0,2],[1,0,2],[-1,0,2],[1,0,2]] 050 [[1,0,2],[-1,1,2],[0,-1,2],[0,0,1]] 051 [[1,0,2],[0,-1,2],[0,0,1],[-1,1,2]] 052 [[-1,1,2],[-1,0,2],[0,0,1],[0,-1,2]] 053 054 [[0,1,2],[0,0,1],[1,0,2],[-1,1,2]] 055 056 057 058 059 [[-1,1,2],[0,0,1],[0,-1,2],[-1,0,2]] 060 061 062 063 064 [[1,0,2],[0,0,1],[-1,1,2],[0,1,2]] 065 066 [[0,1,2],[1,-1,2],[0,0,1],[-1,0,2]] 067 [[-1,1,2],[0,0,1],[0,1,2],[1,0,2]] 068 [[-1,1,2],[0,1,2],[-1,0,2],[0,0,1]] 069 [[1,0,2],[-1,0,2],[-1,0,2],[1,0,2]] 070 [[0,0,1],[1,0,2],[0,1,2],[1,-1,2]] 071 072 073 074 [[0,0,1],[0,0,1],[1,0,1],[0,0,1]] 075 [[1,0,2],[0,-1,2],[0,0,1],[1,-1,2]] 076 077 078 079 080 [[0,1,2],[0,0,1],[-1,0,2],[1,-1,2]] 081 [[1,0,2],[-1,0,2],[1,0,2],[1,0,2]] 082 [[-1,1,2],[-1,0,2],[0,0,1],[0,1,2]] 083 [[0,1,2],[1,0,2],[1,-1,2],[0,0,1]] 084 [[1,0,2],[-1,1,2],[0,1,2],[0,0,1]] 085 086 [[0,0,1],[0,1,2],[1,-1,2],[1,0,2]] 087 088 089 090 091 [[0,0,1],[-1,1,2],[1,0,2],[0,-1,2]] 092 093 094 095 096 [[0,1,2],[-1,1,2],[0,0,1],[-1,0,2]] 097 098 [[1,0,2],[0,0,1],[1,-1,2],[0,1,2]] 099 [[1,0,2],[0,1,2],[0,0,1],[1,-1,2]] 100 [[0,0,1],[1,0,2],[0,1,2],[-1,1,2]] 101 [[1,0,2],[-1,0,2],[1,0,2],[-1,0,2]] 102 [[-1,1,2],[0,-1,2],[1,0,2],[0,0,1]] 103 104 105 106 [[0,0,1],[1,0,1],[0,0,1],[0,0,1]] 107 [[-1,1,2],[0,0,1],[0,-1,2],[1,0,2]] 108 109 110 111 112 [[-1,1,2],[1,0,2],[0,0,1],[0,1,2]] 113 [[1,0,2],[1,0,2],[1,0,2],[-1,0,2]] 114 [[0,1,2],[0,0,1],[1,0,2],[1,-1,2]] 115 [[0,0,1],[-1,1,2],[1,0,2],[0,1,2]] 116 [[0,0,1],[0,1,2],[1,-1,2],[-1,0,2]] 117 118 [[1,0,2],[1,-1,2],[0,-1,2],[0,0,1]] 119 120 121 122 123 [[0,1,2],[-1,0,2],[-1,1,2],[0,0,1]] 124 125 126 127

jrus (me@jacobrus.com)
2018-09-07 16:35:54

that is, from the lower 7 bits of it

jrus (me@jacobrus.com)
2018-09-07 16:36:09

to tell if a reflection is needed, count up the number of 1s in the bit string

Scott (scott@vorthmann.org)
2018-09-07 16:36:32

It still bothers me to go to floats for this. Every other aspect I like

jrus (me@jacobrus.com)
2018-09-07 16:36:43

to go to floats for finding signs?

Scott (scott@vorthmann.org)
2018-09-07 16:36:51

Yes

jrus (me@jacobrus.com)
2018-09-07 16:36:58

it's not going to matter for the sizes of integers that javascript can deal with

Scott (scott@vorthmann.org)
2018-09-07 16:37:17

Remind me to ask you a detail about how floats work

jrus (me@jacobrus.com)
2018-09-07 16:37:20

the alternative is to do everything in some custom arbitrary precision integer type

jrus (me@jacobrus.com)
2018-09-07 16:37:37

and then run the Euclidean algorithm every time to determine the sign

jrus (me@jacobrus.com)
2018-09-07 16:38:07

[optionally cache the signs of small golden integers]

jrus (me@jacobrus.com)
2018-09-07 16:38:55

personally I'd rather not resort to that since it makes everything substantially more complicated

Scott (scott@vorthmann.org)
2018-09-07 16:39:01

Also I don't know how one applies the Euc alg to Golden rationals

jrus (me@jacobrus.com)
2018-09-07 16:39:05

at that point you definitely want a new type in a library somewhere

Scott (scott@vorthmann.org)
2018-09-07 16:39:57

Not enough BW here... Talk later. Leaving work shortly

jrus (me@jacobrus.com)
2018-09-07 16:40:02

cheers

jrus (me@jacobrus.com)
2018-09-07 16:40:21

you need to determine if the ratio between a and b is bigger or smaller than -phi

jrus (me@jacobrus.com)
2018-09-07 16:42:21

you can basically turn the ratio into a continued fraction, and as soon as you hit a digit that isn’t 1, you stop

jrus (me@jacobrus.com)
2018-09-07 16:44:41

for instance, if you started with 8/5, you do 8/5 = 1 + 3/5 = 1 + 1/(1 + 2/3) = 1 + 1/(1 + 1/(1 + 1/2))

jrus (me@jacobrus.com)
2018-09-07 16:44:50

count up the 1s

jrus (me@jacobrus.com)
2018-09-07 16:45:21

the parity tells you whether your ratio was bigger or smaller than the golden ratio

jrus (me@jacobrus.com)
2018-09-07 16:45:51

figuring out the precise details of the algorithm and making sure it works in all edge cases might be a pain, I'm not sure

jrus (me@jacobrus.com)
2018-09-07 16:47:03

probably not inordinately difficult, but it'll probably take me an hour or something to do

jrus (me@jacobrus.com)
2018-09-07 16:47:17

and the result is much worse performing than floats

jrus (me@jacobrus.com)
2018-09-07 17:01:27

[I didn't meant to imply I would actually do this any time soon]

jrus (me@jacobrus.com)
2018-09-07 18:17:11

@Scott okay, here

jrus (me@jacobrus.com)
2018-09-07 18:17:13

```orbit2 = { // Return (a < 0); as a side effect, change a to abs(a), in place. const lt0abs = function lt0abs(a) { const float = a[0] + PHI * a[1], sign = ((float>0)-(float<0)); a[0] *= sign; a[1] **= sign; return +(sign < 0); }

// Parity of the number of ones of an 8-bit integer in binary const hammingparity = function hammingparity(n) { n -= (n >> 1) & 0x55; n -= (n >> 2) & 0x33; return (n - (n >> 4)) & 0x01; }

const v = [[-1, 1], [-1], [0, -1]]; // φ⁻ -1 -φ

return function orbit2(u) { u = [[...u[0]], [...u[1]], [...u[2]]]; // Make a deep copy of 'u'.

// Reduce to the 'kite' shape at the corner of one octant:
const bits = [lt0_abs(u[0]), lt0_abs(u[1]), lt0_abs(u[2])];
bits[1] ^= bits[0]; bits[2] ^= bits[0]; // Make sure reflections have the same lower-order bits.
u = transform(red_rotation, u); bits.push(lt0_abs(u[1]), lt0_abs(u[2]));
u = transform(red_rotation, u); bits.push(lt0_abs(u[1]), lt0_abs(u[2]));

// Now reflect the top triangle of the kite onto the bottom triangle:
let d = dot(u, v), ds = +grgreater([0], d); bits.push(ds);
d = grmul([-ds, 0, 2], d); u = vectoradd(u, scalarmul(d, v));

const orb = scalarmul(grinv(u[0]), [u[1], u[2]]); // rational coordinates of a gnomonic projection
const bits_int = bits.reduce((a, b) =&gt; (a &lt;&lt; 1) + b);
const quat = orbit_quaternions[bits_int &amp; 127];
const reflected = hamming_parity(bits_int);

return [orb, quat, reflected];

} }```

jrus (me@jacobrus.com)
2018-09-07 18:17:28

this gives us orbit, quaternion, and whether to reflect

jrus (me@jacobrus.com)
2018-09-07 18:19:27

where orbit_quaternions is a list defined separately

jrus (me@jacobrus.com)
2018-09-07 18:19:53

length 128 array with only 60 entries

jrus (me@jacobrus.com)
2018-09-07 18:20:55

for struts along the boundary of the canonical triangle, this is going to give us a somewhat arbitrary one of the aliased orientations

jrus (me@jacobrus.com)
2018-09-07 18:21:24

s/struts/vectors

jrus (me@jacobrus.com)
2018-09-07 20:39:48

@Scott I'm going to eat, will probably be back in an hour or two... when I get back you can maybe help me figure out exactly what we need to convert a pair of points -> a form that we can directly render

jrus (me@jacobrus.com)
2018-09-07 20:40:27

i.e. a pair of points representing nodes which should be connected by a strut

Scott (scott@vorthmann.org)
2018-09-07 21:07:22

Sounds good

jrus (me@jacobrus.com)
2018-09-07 22:17:55

okay, back

jrus (me@jacobrus.com)
2018-09-07 22:23:43

@Scott okay, let's figure this one out

jrus (me@jacobrus.com)
2018-09-07 22:30:26

@Scott how well does it work if instead of providing orbit by name, orientation by number, and length relative to an externally described vector, if we provide (1) orbit by canonical projective coordinates, (2) orientation by explicit quaternion, and (3) length as the length of the 1st coordinate when the vector has been rotated into the canonical triangle

jrus (me@jacobrus.com)
2018-09-07 22:31:04

and possibly a bit for reflection

Scott (scott@vorthmann.org)
2018-09-07 22:33:19

sorry, just noticed!

jrus (me@jacobrus.com)
2018-09-07 22:33:26

no worries

jrus (me@jacobrus.com)
2018-09-07 22:33:33

I've been fiddling with other code

Scott (scott@vorthmann.org)
2018-09-07 22:33:36

I was already planning on #1

Scott (scott@vorthmann.org)
2018-09-07 22:34:03

we won't need the reflection bit... more when we talk

jrus (me@jacobrus.com)
2018-09-07 22:34:16

I assume if it's reflected you just swap the vertices

Scott (scott@vorthmann.org)
2018-09-07 22:34:21

correct

Scott (scott@vorthmann.org)
2018-09-07 22:34:41

it took me a while longer to figure that out!

jrus (me@jacobrus.com)
2018-09-07 22:34:43

but I don't necessarily want to do that along the way

jrus (me@jacobrus.com)
2018-09-07 22:34:58

that can be done at the end before rendering

Scott (scott@vorthmann.org)
2018-09-07 22:35:01

no, not until mapping segment to strut

jrus (me@jacobrus.com)
2018-09-07 22:35:41

maybe it's helpful for the sake of de-duplicating struts

jrus (me@jacobrus.com)
2018-09-07 22:35:48

even in intermediate steps

Scott (scott@vorthmann.org)
2018-09-07 22:35:54

could be, yes

Scott (scott@vorthmann.org)
2018-09-07 22:36:01

we're not going to worry about dedup yet

Scott (scott@vorthmann.org)
2018-09-07 22:36:04

won't hurt anything

jrus (me@jacobrus.com)
2018-09-07 22:36:18

my existing deduplicate function should work fine

Scott (scott@vorthmann.org)
2018-09-07 22:36:24

sure

Scott (scott@vorthmann.org)
2018-09-07 22:36:35

but on arbitrary object?

jrus (me@jacobrus.com)
2018-09-07 22:36:36

I switched it from '' + foo to JSON.stringify(foo)

Scott (scott@vorthmann.org)
2018-09-07 22:36:41

ok

jrus (me@jacobrus.com)
2018-09-07 22:37:08

the former one gets rid of the brackets for an array, so there's some potential for cases where it loses information

jrus (me@jacobrus.com)
2018-09-07 22:37:16

I think JSON.stringify should be reasonably fast

jrus (me@jacobrus.com)
2018-09-07 22:37:39

the logic is implemented in some compiled language and heavily optimized

Scott (scott@vorthmann.org)
2018-09-07 22:37:47

sure, np

Scott (scott@vorthmann.org)
2018-09-07 22:38:10

I think quats instead of orbit indices is fine... eliminate dependency

Scott (scott@vorthmann.org)
2018-09-07 22:38:16

and length too

jrus (me@jacobrus.com)
2018-09-07 22:38:20

I think we could do better if we used a custom type built out of a typed array or whatever, but I think this should be fine for any model with less than millions of objects

Scott (scott@vorthmann.org)
2018-09-07 22:38:28

yes

Scott (scott@vorthmann.org)
2018-09-07 22:39:01

I think we can just generate a new vertex whenever we need to generate either end ball for a strut... not worry about duplication

Scott (scott@vorthmann.org)
2018-09-07 22:39:52

ready for a screenshare?

Scott (scott@vorthmann.org)
2018-09-07 22:41:42

https://join.me/961-497-464

join.me
jrus (me@jacobrus.com)
2018-09-07 22:43:35

okay, back

jrus (me@jacobrus.com)
2018-09-07 23:43:01

@Scott okay, so let me figure out what the orientation quaternions are of all of your prototype struts

jrus (me@jacobrus.com)
2018-09-07 23:44:33

and then I can try to transform them all to jacob-standard-form, and make a lookup of orbit projective coordinates -> color names

jrus (me@jacobrus.com)
2018-09-07 23:45:17

@Scott PS I did almost no pre-planning of my function names, so they are probably terribly inconsistent, and possibly just terrible in general

jrus (me@jacobrus.com)
2018-09-07 23:45:27

@Scott if you have any ideas for renames, I'm happy to oblige

jrus (me@jacobrus.com)
2018-09-07 23:52:13

@Scott did I screw something up about how blue_struts render?

jrus (me@jacobrus.com)
2018-09-07 23:59:37

@Scott oh here's an interesting one. it turns out that I may need more than 60 entries in my array after all; apparently for vectors on the edge of the canonical triangle, the bit pattern turns out differently than for vectors in the interior

Scott (scott@vorthmann.org)
2018-09-08 00:02:24

refactored, reshared @jrus

Scott (scott@vorthmann.org)
2018-09-08 00:03:02

Hmmm, forgot to ask you about that... most of our vectors will fall on the mirrors, of course

Scott (scott@vorthmann.org)
2018-09-08 00:03:47

I also had a question about behavior of floating point ops w.r.t. sign errors... can precision error ever affect the sign?

Scott (scott@vorthmann.org)
2018-09-08 00:04:19

are the blue struts rendering inside out?

Scott (scott@vorthmann.org)
2018-09-08 00:05:55

as for function names, I think I'll want to introduce the field concept sooner or later... so "grfloat" will be bound as "goldenNumber.evaluate", and so on

Scott (scott@vorthmann.org)
2018-09-08 00:06:33

or rather "field.evaluate", since field will be assigned goldenField

Scott (scott@vorthmann.org)
2018-09-08 00:07:03

not describing it well... just an object containing functions

jrus (me@jacobrus.com)
2018-09-08 00:10:14

@Scott there should only be a sign error for numbers > 2^53

jrus (me@jacobrus.com)
2018-09-08 00:10:38

we are good up to 9,007,199,254,740,992

jrus (me@jacobrus.com)
2018-09-08 00:14:00

@Scott we should get a sign error for anything smaller than φ^(–78)

jrus (me@jacobrus.com)
2018-09-08 00:14:04

potentially

Scott (scott@vorthmann.org)
2018-09-08 00:16:28

lol

jrus (me@jacobrus.com)
2018-09-08 00:16:53

@Scott actually though, some of the code might convert stuff to 32-bit integers

jrus (me@jacobrus.com)
2018-09-08 00:17:03

when we do integer-type operations

Scott (scott@vorthmann.org)
2018-09-08 00:17:23

not worrying, just curious

jrus (me@jacobrus.com)
2018-09-08 00:17:59

in that case you might start getting weirdness at φ^(–47)

jrus (me@jacobrus.com)
2018-09-08 00:18:44

@Scott if you need to make models spanning 50 powers of φ, we can talk about some arbitrary precision integer types

jrus (me@jacobrus.com)
2018-09-08 00:19:31

@Scott did you check the rendering of blue_struts?

Scott (scott@vorthmann.org)
2018-09-08 00:27:59

whew, kids in bed

Scott (scott@vorthmann.org)
2018-09-08 00:28:15

oh, I will

Scott (scott@vorthmann.org)
2018-09-08 00:29:06

yes, they just went wonky when I reloaded

Scott (scott@vorthmann.org)
2018-09-08 00:30:07

now I have extruded edges of a dodec, rather than the rays of an icosido

jrus (me@jacobrus.com)
2018-09-08 00:36:59

aha

jrus (me@jacobrus.com)
2018-09-08 00:37:13

@Scott so it's supposed to look like that?

jrus (me@jacobrus.com)
2018-09-08 00:37:46

oh, or you are describing the results, rather than the intent 🙂

jrus (me@jacobrus.com)
2018-09-08 00:38:26

I got sidetracked by simon. yao is asleep. we'll see if he lets me work or demands I read more books 🙂

Scott (scott@vorthmann.org)
2018-09-08 00:45:08

results... intent is still a porcupine ball

Scott (scott@vorthmann.org)
2018-09-08 00:45:19

no worries, I'm sleeping soon

Scott (scott@vorthmann.org)
2018-09-08 00:45:36

struggling with spread syntax for arbitrary object keys

jrus (me@jacobrus.com)
2018-09-08 00:45:43

example?

jrus (me@jacobrus.com)
2018-09-08 00:46:02

I am trying to fill in the missing bits in my array

Scott (scott@vorthmann.org)
2018-09-08 00:46:07

icosahedralsolidconnectors_shapes.strutGeometries...

Scott (scott@vorthmann.org)
2018-09-08 00:46:31

keyed by orbit name, but I need to parse the pieces of each shape object (the value space)

Scott (scott@vorthmann.org)
2018-09-08 00:46:48

can map() work over object fields?

jrus (me@jacobrus.com)
2018-09-08 00:47:24

hard for me to judge without a bit clearer context

jrus (me@jacobrus.com)
2018-09-08 00:47:59

feel free to paste a blob of code 🙂

Scott (scott@vorthmann.org)
2018-09-08 00:48:26

I think I found what I need

Scott (scott@vorthmann.org)
2018-09-08 00:48:36

https://stackoverflow.com/questions/14810506/map-function-for-objects-instead-of-arrays

Stack Overflow
jrus (me@jacobrus.com)
2018-09-08 00:48:50

you can do stuff like {a, b} = foo, and that is a shortcut for a = foo.a, b = foo.b;

Scott (scott@vorthmann.org)
2018-09-08 00:48:54

some examples using reduce with object.keys()

Scott (scott@vorthmann.org)
2018-09-08 00:49:12

yes, but the keys are data here

Scott (scott@vorthmann.org)
2018-09-08 00:49:17

blue, red, etc.

Scott (scott@vorthmann.org)
2018-09-08 00:49:54

I'll work it out

jrus (me@jacobrus.com)
2018-09-08 00:49:58

oh, spread syntax, not destructuring assignment

Scott (scott@vorthmann.org)
2018-09-08 00:50:02

right

jrus (me@jacobrus.com)
2018-09-08 00:50:23

one thing to note, {...object} syntax doesn't work in safari or edge

Scott (scott@vorthmann.org)
2018-09-08 00:51:03

let newObj = Object.keys(obj).reduce((p, c) => ({...p, [c]: obj[c] ** obj[c]}), {});

Scott (scott@vorthmann.org)
2018-09-08 00:51:07

is the example

Scott (scott@vorthmann.org)
2018-09-08 00:51:10

got it

jrus (me@jacobrus.com)
2018-09-08 00:51:12

but you can instead do Object.assign({}, object, ...)

Scott (scott@vorthmann.org)
2018-09-08 00:51:31

you use Chrome?

jrus (me@jacobrus.com)
2018-09-08 00:51:39

I do not

jrus (me@jacobrus.com)
2018-09-08 00:51:50

Chrome falls over hard with as many browser tabs as I have

Scott (scott@vorthmann.org)
2018-09-08 00:51:56

oh, I remember

Scott (scott@vorthmann.org)
2018-09-08 00:52:02

Firefox or Safari?

jrus (me@jacobrus.com)
2018-09-08 00:52:05

safari

jrus (me@jacobrus.com)
2018-09-08 00:52:18

people's notebooks using {...foo} are constantly annoying 🙂

Scott (scott@vorthmann.org)
2018-09-08 00:52:26

oh, so you'll have trouble with mine

Scott (scott@vorthmann.org)
2018-09-08 00:52:28

I'll adjust

jrus (me@jacobrus.com)
2018-09-08 00:52:37

I think people are used to writing code with babel or whatever

jrus (me@jacobrus.com)
2018-09-08 00:52:56

letting some other layer convert their modern javascript to a form that old browsers can deal with

Scott (scott@vorthmann.org)
2018-09-08 00:53:10

yes

jrus (me@jacobrus.com)
2018-09-08 00:53:12

the spread syntax for objects isn't yet in a finalized spec I think

jrus (me@jacobrus.com)
2018-09-08 00:53:28

I'm sure safari and edge will support it within a year or two

Scott (scott@vorthmann.org)
2018-09-08 00:53:36

I saw that... and Observable doesn't handle it for us? It does its own parsing, right?

jrus (me@jacobrus.com)
2018-09-08 00:53:46

it doesn't change your javascript, no

Scott (scott@vorthmann.org)
2018-09-08 00:54:10

but it does insert observables and promises somehow

jrus (me@jacobrus.com)
2018-09-08 00:54:23

well yes

jrus (me@jacobrus.com)
2018-09-08 00:54:27

it does change some of your javascript

jrus (me@jacobrus.com)
2018-09-08 00:54:42

it doesn't rewrite it all to work across arbitrary browsers

Scott (scott@vorthmann.org)
2018-09-08 00:54:47

got it

jrus (me@jacobrus.com)
2018-09-08 00:56:00

ah, apparently this is in the ECMA 2018spec

jrus (me@jacobrus.com)
2018-09-08 00:57:01

finalized in june

jrus (me@jacobrus.com)
2018-09-08 00:57:20

apple and microsoft should get on it!

Scott (scott@vorthmann.org)
2018-09-08 00:57:47

I'm fading... reshared, with the shape creation refactored as you suggested. Also reduced object creation for balls

Scott (scott@vorthmann.org)
2018-09-08 00:57:55

good night

jrus (me@jacobrus.com)
2018-09-08 00:57:58

'night

jrus (me@jacobrus.com)
2018-09-08 00:58:24

I'll see if I can remap your default struts to standard orientation

jrus (me@jacobrus.com)
2018-09-08 01:02:20

@Scott I think there might literally be only one orbit that wasn't in there before. the (1, 0, 0) direction, which you get from an identity matrix

jrus (me@jacobrus.com)
2018-09-08 01:03:38

but of course the blue strut was the first one I looked at, and got a 'undefined' for the quaternion

jrus (me@jacobrus.com)
2018-09-08 01:06:15

oh there were 2 orbits

jrus (me@jacobrus.com)
2018-09-08 01:06:46

both axis-aligned blue directions

jrus (me@jacobrus.com)
2018-09-08 01:07:01

erm, I am using the word 'orbit' wrong in the above; I meant 'orientation'

jrus (me@jacobrus.com)
2018-09-08 01:13:22

@Scott oh! I know what I broke in your code. I didn't realize you were using quattransform

jrus (me@jacobrus.com)
2018-09-08 01:13:35

@Scott I switched it to take a 3-element vector

jrus (me@jacobrus.com)
2018-09-08 01:13:42

as the second argument

jrus (me@jacobrus.com)
2018-09-08 01:14:33

I can switch that back if you want, but I think it's more obvious if it takes a 3-element input

jrus (me@jacobrus.com)
2018-09-08 01:14:38

blue_struts = ({ vertices: icosahedral_quaternions_vzome .map( q =&gt; quattransform( q, [[-3,-5,1],[0],[0]] ) ) .concat( [[ [0],[0],[0] ]] ), balls: icosahedral_quaternions_vzome .map( (q,index) =&gt; index ) .concat( [ 60 ] ), struts: icosahedral_quaternions_vzome .map( (q,index) =&gt; ({ start: index, length: [3,5,1], orbit: "blue", orientation: index })) })

jrus (me@jacobrus.com)
2018-09-08 01:14:39

is fixed

Scott (scott@vorthmann.org)
2018-09-08 09:42:18

I have reshared. Normalization of vZome exports is completed, and I believe I have removed all the object spreads.

Scott (scott@vorthmann.org)
2018-09-08 09:47:57

Reshared again. Quaternions are now part of the model, as an indexed array.

Scott (scott@vorthmann.org)
2018-09-08 10:55:37

no, but I like it

jrus (me@jacobrus.com)
2018-09-08 10:56:09

@Scott last night I got confused by the edge case behavior of the orbit stuff

jrus (me@jacobrus.com)
2018-09-08 10:56:18

need to figure out exactly what is going on

Scott (scott@vorthmann.org)
2018-09-08 10:56:34

ok, no worries... I'm still busy with more normalization

jrus (me@jacobrus.com)
2018-09-08 10:57:05

I had started in on normalizing your strut prototypes to the same fundamental triangle

Scott (scott@vorthmann.org)
2018-09-08 10:57:43

by "part of the model", I meant that the input model for vZomeRenderer now requires a "quaternions" indexed array... each strut "orientation" is still an index into that array

jrus (me@jacobrus.com)
2018-09-08 10:57:54

got it 🙂

Scott (scott@vorthmann.org)
2018-09-08 10:58:03

whatever issue you hit with the prototypes, I'll probably hit soon.

jrus (me@jacobrus.com)
2018-09-08 10:58:18

yeah, don't rely on my orbit2 code yet probably 🙂

Scott (scott@vorthmann.org)
2018-09-08 10:58:23

I'm trying to switch from the old orbit names to the new

Scott (scott@vorthmann.org)
2018-09-08 10:58:43

I'm only using the 2-vector output

jrus (me@jacobrus.com)
2018-09-08 10:58:55

@Scott { "[[0,0,1],[0,0,1]]": "blue", "[[-1,1,1],[0,0,1]]": "red", "[[0,0,1],[2,-1,1]]": "yellow", "[[2,-1,1],[5,-3,1]]": "green", "[[-4,3,5],[3,-1,5]]": "orange", "[[2,-1,1],[0,0,1]]": "purple", "[[-2,3,11],[-7,5,11]]": "black", "[[-3,2,1],[-3,2,1]]": "lavender", "[[3,-1,5],[0,0,1]]": "olive", "[[5,-3,1],[0,0,1]]": "maroon", "[[0,0,1],[-4,3,5]]": "rose", "[[-1,1,2],[2,-1,2]]": "navy", "[[2,-1,2],[-3,2,2]]": "turquoise", "[[-3,2,2],[-1,1,2]]": "coral", "[[-1,1,3],[0,0,1]]": "sulfur", "[[-8,5,1],[5,-3,1]]": "sand", "[[2,-1,3],[-1,1,3]]": "apple", "[[5,-3,2],[2,-1,2]]": "cinnamon", "[[-5,4,11],[-5,4,11]]": "spruce", "[[2,-1,3],[5,-3,3]]": "brown", }

Scott (scott@vorthmann.org)
2018-09-08 10:58:58

the first element

Scott (scott@vorthmann.org)
2018-09-08 10:59:20

yes, I have already reindexed my strut shapes in that way

Scott (scott@vorthmann.org)
2018-09-08 11:00:57

your instability is in the quaternion output? or the sign bit? or both

jrus (me@jacobrus.com)
2018-09-08 11:01:50

the quaternion output is not necessarily reliable in edge cases

jrus (me@jacobrus.com)
2018-09-08 11:01:57

I need to figure it out

Scott (scott@vorthmann.org)
2018-09-08 11:02:07

got it. Not using it, so I should be OK

jrus (me@jacobrus.com)
2018-09-08 11:19:30

@Scott canonicalizing some of the strut directions & lengths definitely makes them uglier. apparently the canonical 'black' strut is in a reflected direction. after improper rotation we go [[0], [1], [1,-1]] -> [[-1,3,2], [1,0,2], [2,-1,2]]

jrus (me@jacobrus.com)
2018-09-08 11:20:03

but then dividing by the first coordinate gets us [[-2,3,11], [-7,5,11]]

Scott (scott@vorthmann.org)
2018-09-08 11:20:16

yes, I noticed that

Scott (scott@vorthmann.org)
2018-09-08 11:20:42

it is an ugly orbit, so maybe that's OK 😉

Scott (scott@vorthmann.org)
2018-09-08 11:21:18

it is a 90-degree rotated blue... or a blue in the 90-degree rotated icosahedron, if you like

jrus (me@jacobrus.com)
2018-09-08 11:22:13

I'm going to try (at some point in the next few days/weeks) to get all these orbits plotted as great circles on the sphere / gnomonic projection / stereographic projection. we can see what patterns we see

Scott (scott@vorthmann.org)
2018-09-08 11:22:18

My renderer is working at the moment by ignoring strut.orbit, and computing it from end-start

jrus (me@jacobrus.com)
2018-09-08 11:22:28

nice

Scott (scott@vorthmann.org)
2018-09-08 11:22:29

so it is a bit of a Frankenstein at the moment

Scott (scott@vorthmann.org)
2018-09-08 11:22:57

Yes, I really want to have that great circle viewer... even with bad mouse rotation

jrus (me@jacobrus.com)
2018-09-08 11:23:06

@Scott so I was thinking about it, the strut geometry shouldn't care whether rotation happens before or after stretching, etc., right?

jrus (me@jacobrus.com)
2018-09-08 11:23:19

i.e. to draw the physical models

jrus (me@jacobrus.com)
2018-09-08 11:23:41

by stretching I mean displacing the 'full length vertices' etc.

jrus (me@jacobrus.com)
2018-09-08 11:24:35

oh wait, I'm confusing myself. you want to cache them by length

Scott (scott@vorthmann.org)
2018-09-08 11:24:56

I think again it comes back to building rotated geometries (lots more, in other words), vs. letting the graphics card do the rotations of one geometry

jrus (me@jacobrus.com)
2018-09-08 11:26:13

but anyhow, my basic point of my line of thought was: I should be able to normalize your existing strut models by just rotating all the vertex coordinates by the appropriate quaternion

Scott (scott@vorthmann.org)
2018-09-08 11:26:25

yes

Scott (scott@vorthmann.org)
2018-09-08 11:26:41

as is, we're stuck with "my" quaternions, right?

jrus (me@jacobrus.com)
2018-09-08 11:26:52

not sure what you mean

jrus (me@jacobrus.com)
2018-09-08 11:27:12

the quaternions are pretty well determined by the symmetry system

Scott (scott@vorthmann.org)
2018-09-08 11:27:37

thinking, please be patient

jrus (me@jacobrus.com)
2018-09-08 11:27:42

🙂

Scott (scott@vorthmann.org)
2018-09-08 11:28:28

my head is doing a Necker cube with the concepts

Scott (scott@vorthmann.org)
2018-09-08 11:29:03

but very unstable, unlike the visual cortex

jrus (me@jacobrus.com)
2018-09-08 11:29:25

luckily I think we both have a right-hand coordinate system. otherwise you might get a literal necker cube

Scott (scott@vorthmann.org)
2018-09-08 11:29:33

rofl

Scott (scott@vorthmann.org)
2018-09-08 11:30:40

with my strut shapes as they are, we have to use my orbit prototypes, right?

Scott (scott@vorthmann.org)
2018-09-08 11:32:38

it is working for me, but only because I apply orbit2 both to a strut vector, and to my orbit prototypes, to define the mapping

jrus (me@jacobrus.com)
2018-09-08 11:33:12

you need to (1) find the icosahedral rotation that takes your orbit prototype -> a 'jacob-canonical' vector [this is just the conjugate of the rotation that goes the other way], (2) apply that rotation in composition with whatever other rotation to move the strut to its final orientation when drawing

Scott (scott@vorthmann.org)
2018-09-08 11:33:13

so I guess there is no reason to change, as long as we index by the canonical orbit name

jrus (me@jacobrus.com)
2018-09-08 11:33:36

this can be done either up front, or at render time

Scott (scott@vorthmann.org)
2018-09-08 11:36:15

does orbit2 use icosahedralquaternionsvzome?

jrus (me@jacobrus.com)
2018-09-08 11:36:56

no

jrus (me@jacobrus.com)
2018-09-08 11:38:03

btw, your strut colors are super hard to figure out the names for just from the colors 🙂

Scott (scott@vorthmann.org)
2018-09-08 11:39:07

I forget the names myself... tried to be somewhat consistent around material concept, but it ended up pretty arbitrary

Scott (scott@vorthmann.org)
2018-09-08 11:39:30

at least there is no mauve or taupe

jrus (me@jacobrus.com)
2018-09-08 11:39:33

there are 3 similar purple ones, two types of salmony colors differing only by lightness/chroma, 4 typesof brown, 2 oliveish greens

Scott (scott@vorthmann.org)
2018-09-08 11:39:50

your monitor sounds off!

Scott (scott@vorthmann.org)
2018-09-08 11:40:13

what is the 2nd oliveish green?

Scott (scott@vorthmann.org)
2018-09-08 11:41:15

the reason I didn't use more of the color space is that I was trying to avoid pastels, for a long time... since those were reserved for automatic orbits

jrus (me@jacobrus.com)
2018-09-08 11:41:22

I guess I just mean yellowish greens. there's like "light side of a leaf green", "dark side of a leaf green",and "olive green"

Scott (scott@vorthmann.org)
2018-09-08 11:41:32

lol

Scott (scott@vorthmann.org)
2018-09-08 11:42:02

the names never mattered much except internally as keys

jrus (me@jacobrus.com)
2018-09-08 11:42:23

I'm teasing you, but I might want to move your colors around a bit

Scott (scott@vorthmann.org)
2018-09-08 11:42:36

cinnamon is too close to maroon and brown... that was a bad choice

jrus (me@jacobrus.com)
2018-09-08 11:43:10

the brighter ones are also a bit radioactive

jrus (me@jacobrus.com)
2018-09-08 11:43:48

that is, turquoise, the brighter purple, the hot pink one, the neon chartreuse one

Scott (scott@vorthmann.org)
2018-09-08 11:43:51

yes... the problem being that balanced brightness is actually counterproductive when trying to distinguish

jrus (me@jacobrus.com)
2018-09-08 11:44:23

we can just tone down the chroma (colorfulness) without changing the lightness or hue

Scott (scott@vorthmann.org)
2018-09-08 11:44:30

but too much variation, and then how do you highlight a selection?

Scott (scott@vorthmann.org)
2018-09-08 11:45:06

I fiddled a lot, but without too much theory

jrus (me@jacobrus.com)
2018-09-08 11:45:27

I have fiddled with this kind of thing before with a lot of theory. it's always a pain

Scott (scott@vorthmann.org)
2018-09-08 11:46:10

I'm OK making tweaks... just a little defensive of this as part of the vZome "brand", I guess

jrus (me@jacobrus.com)
2018-09-08 11:46:51

I don't need to clobber your colors. I just want to make a few of them more distinct and a few of them less colorful (maybe a few of them more colorful)

Scott (scott@vorthmann.org)
2018-09-08 11:46:54

at least I know you won't ask me to make orange struts red, as Marc did

jrus (me@jacobrus.com)
2018-09-08 11:47:10

is there an orange direction?

jrus (me@jacobrus.com)
2018-09-08 11:47:37

oh I see

Scott (scott@vorthmann.org)
2018-09-08 11:47:57

sure, pretty important. Red in a 90-degree rotated icosahedron. Lies in a red plane, too. Pops up a lot in 4D projections

jrus (me@jacobrus.com)
2018-09-08 11:48:20

@Scott okay, I'm going to table the color thing for now

Scott (scott@vorthmann.org)
2018-09-08 11:48:25

np

Scott (scott@vorthmann.org)
2018-09-08 11:48:46

I'm still struggling with the orbit / quaternion thing, a bit

jrus (me@jacobrus.com)
2018-09-08 11:48:58

at some point (and not necessarily for vzome) I'm excited to experiment with that 'plastic sequence' thingy or something related, to see if I can get an auto-generated list that starts out with a few good looking colors and then keeps generating ideally distinct ones indefinitely

Scott (scott@vorthmann.org)
2018-09-08 11:49:12

yes!

Scott (scott@vorthmann.org)
2018-09-08 11:49:31

I'd like to reintroduce coloring of automatic orbits, based on that

Scott (scott@vorthmann.org)
2018-09-08 11:49:48

white is just a cop-out

Scott (scott@vorthmann.org)
2018-09-08 11:52:55

let's use the term "resolve" to mean what orbit2 does...

Scott (scott@vorthmann.org)
2018-09-08 11:54:42

just reshared... right now, the renderer resolves a strut based on end-start, but then ignores the quaternion returned, using only the orbit to look up the shape (and its prototype)

jrus (me@jacobrus.com)
2018-09-08 11:55:11

alright, I'm going to systematically go through all 120 symmetries of 7 example orbits, checking what bit pattern my code dumps out for each one, and make sure that they are all compatible

test_orbits = [ [[[2,-1,2],[-3,2,2]], "turquoise"], [[[2,-1,1],[5,-3,1]], "green"], [[[0,0,1],[-4,3,5]], "rose"], [[[2,-1,1],[0,0,1]], "purple"], [[[-1,1,1],[0,0,1]], "red"], [[[0,0,1],[2,-1,1]], "yellow"], [[[0,0,1],[0,0,1]], "blue"], ]

Scott (scott@vorthmann.org)
2018-09-08 11:55:14

the quaternion used is from icosahedralquaternionsvzome, as indexed by strut.orientation

jrus (me@jacobrus.com)
2018-09-08 11:55:23

that should hit all the edge cases

Scott (scott@vorthmann.org)
2018-09-08 11:55:29

ok

Scott (scott@vorthmann.org)
2018-09-08 11:55:42

you mean "edge cases" literally, don't you

Scott (scott@vorthmann.org)
2018-09-08 11:55:50

no, sorry... not turquoise

jrus (me@jacobrus.com)
2018-09-08 11:55:50

well also corner cases

jrus (me@jacobrus.com)
2018-09-08 11:56:06

turquoise is my example of a "not an edge case"

Scott (scott@vorthmann.org)
2018-09-08 11:56:18

this is upside down... red, yellow, blue are literally corner cases, but figuratively not!

Scott (scott@vorthmann.org)
2018-09-08 11:57:39

turquoise (or better, spruce) is a non-edge case literally, but it arises rarely, so it is a figurative edge-case

jrus (me@jacobrus.com)
2018-09-08 11:58:05

spruce = "dark side of a leaf green"?

Scott (scott@vorthmann.org)
2018-09-08 11:58:15

spruce, by the way, has a special property... it probably corresponds to some form of center of the domain

Scott (scott@vorthmann.org)
2018-09-08 11:58:23

yes

jrus (me@jacobrus.com)
2018-09-08 11:58:31

I went for turquoise because it's easier to match what I see on vzome to the name

Scott (scott@vorthmann.org)
2018-09-08 11:59:13

If you apply icosahedral symmetry to a spruce strut, then build faces to panel the vertices... the faces are orthogonal to spruce.

jrus (me@jacobrus.com)
2018-09-08 11:59:29

neat

Scott (scott@vorthmann.org)
2018-09-08 11:59:56

In other words, a spruce line exits from a vertex of that object, but re-enters orthogonal to a face.

Scott (scott@vorthmann.org)
2018-09-08 12:00:24

just a bit of trivia

jrus (me@jacobrus.com)
2018-09-08 12:01:08

maybe someone can make a neat model from this idea

Scott (scott@vorthmann.org)
2018-09-08 12:02:20

stepping away... maybe some food will help me think

jrus (me@jacobrus.com)
2018-09-08 12:02:24

cheers

jrus (me@jacobrus.com)
2018-09-08 12:03:47

I'm somewhat surprised you don't have any other orbits between blue and yellow except "rose"

jrus (me@jacobrus.com)
2018-09-08 12:04:52

I guess it's a bit like rational numbers: the main orbits repel other ones a bit

Scott (scott@vorthmann.org)
2018-09-08 12:06:02

Yes I think so. Not many great circle crossings there

jrus (me@jacobrus.com)
2018-09-08 12:06:18

actually, if there's some systematic way to generate orbits and heuristically judge their 'simplicity', we could make a picture like the zigzag chart

jrus (me@jacobrus.com)
2018-09-08 12:06:52

where we draw 10k orbits (or whatever) as great circles, fading gradually to white

Scott (scott@vorthmann.org)
2018-09-08 12:07:02

Oh I see

jrus (me@jacobrus.com)
2018-09-08 12:07:05

will probably see some interesting patterns in there

Scott (scott@vorthmann.org)
2018-09-08 12:09:25

the Synergetics folks always talk about them by generations... RYB circles intersect to create orange, purple, green orbits, and their planes intersect further, and so on

jrus (me@jacobrus.com)
2018-09-08 12:09:33

aha

Scott (scott@vorthmann.org)
2018-09-08 12:10:19

that would be a good scheme for generating the planes... I have some friends that would no doubt see God (or something) in such a figure

jrus (me@jacobrus.com)
2018-09-08 12:11:17

I would probably just list all the combinations of golden-integer coordinates in 3-space, order them by how big the numbers in the coordinates get, then remove duplicates

Scott (scott@vorthmann.org)
2018-09-08 12:11:57

I think we'd see surprising amounts of overlap between the two approaches

jrus (me@jacobrus.com)
2018-09-08 12:12:09

oh I would expect the results to be similar

jrus (me@jacobrus.com)
2018-09-08 12:12:22

just doing all the repeated intersections is more complicated to code

Scott (scott@vorthmann.org)
2018-09-08 12:12:40

true

Scott (scott@vorthmann.org)
2018-09-08 12:13:11

AFK

jrus (me@jacobrus.com)
2018-09-08 12:19:52

wow, there's one improper rotation for which every one of my 7 orbits returns a different bit string

Scott (scott@vorthmann.org)
2018-09-08 12:32:40

when you make a bug, you make a winner, I guess

jrus (me@jacobrus.com)
2018-09-08 12:35:04

I don't think it's a bug

Scott (scott@vorthmann.org)
2018-09-08 12:35:28

just nondeterminism?

jrus (me@jacobrus.com)
2018-09-08 12:35:42

for the edge cases, multiple different rotations send the orbit to the same direction (aliasing)

jrus (me@jacobrus.com)
2018-09-08 12:35:57

so when you start with a direction and work back to find the rotation, you will only pick out one of those

Scott (scott@vorthmann.org)
2018-09-08 12:37:03

I see

jrus (me@jacobrus.com)
2018-09-08 12:38:24

we just get a different choice of alias

Scott (scott@vorthmann.org)
2018-09-08 12:39:27

yes, now I know what you were referring to. The reason why five different quaternions or matrices will work equally well to render a red strut

jrus (me@jacobrus.com)
2018-09-08 12:39:29

anyway, time to go out

Scott (scott@vorthmann.org)
2018-09-08 12:39:33

ok cheers

Scott (scott@vorthmann.org)
2018-09-08 12:53:57

FWIW, I fixed the VSON exporter. The all_turquoise model is now rendered correctly. Reshared.

jrus (me@jacobrus.com)
2018-09-08 14:13:13

nice

Scott (scott@vorthmann.org)
2018-09-08 18:26:11

@jrus OK I have finished my refactoring. vZomeRenderer now accepts a model like the following:

Scott (scott@vorthmann.org)
2018-09-08 18:26:36

The "end" index is optional, not required for rendering.

Scott (scott@vorthmann.org)
2018-09-08 18:27:11

I have also implemented resolveModel, using orbit2 to go from a list of vertex pairs to a model of this form.

Scott (scott@vorthmann.org)
2018-09-08 18:27:27

https://beta.observablehq.com/d/70a3c92c576398bb#resolveModel

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-08 18:28:37

My test, using endpoints of a single blue strut and a single yellow, gives me one "undefined" quaternion for blue... I guess this is the problem you're working on

Scott (scott@vorthmann.org)
2018-09-08 18:28:38

https://beta.observablehq.com/d/70a3c92c576398bb#testResolve

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-08 18:37:50

Predictably, as you can see in the rendering, the yellow strut is going in the wrong direction. I handle the missing quaternion, but for some reason I don't get a blue strut.

Scott (scott@vorthmann.org)
2018-09-08 18:38:52

Also, I'm not scaling things correctly.

jrus (me@jacobrus.com)
2018-09-08 19:54:21

@Scott I just woke up from my nap

jrus (me@jacobrus.com)
2018-09-08 19:54:35

I'll see if I can figure out this orbit thing some more

jrus (me@jacobrus.com)
2018-09-08 19:57:01

I think I can get it to work out consistently for any arbitrary strut, but I'm doing some sort of "factual investigation" to see what the code actually does in various edge cases

jrus (me@jacobrus.com)
2018-09-08 23:45:29

@Scott okay, was gone for a while. I think I was attacking this the wrong (needlessly cute) way. Instead I’m going to just work through the transformations implied by each potential reflection applied during my orbit code, and then compose them all together for each possible pattern of reflections

jrus (me@jacobrus.com)
2018-09-08 23:45:45

some of the patterns won't ever happen in practice, but it's okay to leave entries in the table for them

Scott (scott@vorthmann.org)
2018-09-08 23:51:25

OK, perhaps you can show me tomorrow. I'd like to understand better, if possible.

jrus (me@jacobrus.com)
2018-09-09 01:45:13

@Scott something along the lines of:

let quat = [[1],[0],[0],[0]];
if (b &amp; 0x80) quat = quatmul(quat, [[0],[1],[0],[0]]);
if (b &amp; 0x40) quat = quatmul(quat, [[0],[0],[1],[0]]);
if (b &amp; 0x20) quat = quatmul(quat, [[0],[0],[0],[1]]);

quat = quatmul(quat, [[0,1,2],[1,0,2],[-1,1,2],[0,0,1]]);
if (b &amp; 0x10) quat = quatmul(quat, [[0],[0],[1],[0]]);
if (b &amp; 0x08) quat = quatmul(quat, [[0],[0],[0],[1]]);

quat = quatmul(quat, [[0,1,2],[1,0,2],[-1,1,2],[0,0,1]]);
if (b &amp; 0x04) quat = quatmul(quat, [[0],[0],[1],[0]]);
if (b &amp; 0x02) quat = quatmul(quat, [[0],[0],[0],[1]]);

if (b &amp; 0x01) quat = quatmul(quat, [[0,0,1],[-1,1,2],[-1,0,2],[0,-1,2]]);
jrus (me@jacobrus.com)
2018-09-09 01:47:02

basically we look at each bit (representing a potential reflection), and if it’s true then we rotate by a quaternion that puts us exactly opposite from that reflection. (basically we treat opposite orientations on the sphere as the same, for the purpose of this code). remember at the end we decide whether to do a final reflection across the origin by counting up all the reflection bits and checking the parity

jrus (me@jacobrus.com)
2018-09-09 01:48:05

I might be multiplying these in the wrong order or on the wrong side (right vs. left multiplication), I'll figure it out in the morning

jrus (me@jacobrus.com)
2018-09-09 01:49:26

then I just can build up a table by starting with every possible value of b between 0 and 255

Scott (scott@vorthmann.org)
2018-09-09 08:13:32

I'm going to try a different approach, minimizing spread. Similar to my brute-force vZome approach, but using some of your ideas to reduce the search space from 60 comparisons down to 12. I'll have to do one last sign check on a non-zero coordinate value, to determine the "sense" within the zone.

jrus (me@jacobrus.com)
2018-09-09 09:18:29

@Scott https://beta.observablehq.com/@jrus/zome-arithmetic#orbit2

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-09 09:18:29

@Scott works great

jrus (me@jacobrus.com)
2018-09-09 09:18:30

I'm not exactly sure what the best output is

jrus (me@jacobrus.com)
2018-09-09 09:18:30

I swapped it to orbit, quaternion, reflection bit, then length (length relative to the projection of the standard orientation onto x=1 plane)

jrus (me@jacobrus.com)
2018-09-09 09:18:51

but maybe I should output a JS object instead of array, dunno

Scott (scott@vorthmann.org)
2018-09-09 09:19:13

yes, I think an object would be clearer

Scott (scott@vorthmann.org)
2018-09-09 09:19:17

I'll try it out

jrus (me@jacobrus.com)
2018-09-09 09:19:43

this thing is pretty much self-contained:

```orbit2 = { // Return (a < 0); as a side effect, change a to abs(a), in place. const lt0abs = function lt0abs(a) { const float = a[0] + PHI * a[1], sign = ((float>0)-(float<0)); a[0] *= sign; a[1] **= sign; return +(sign < 0); }

// Parity of the count of ones of an 8-bit integer in binary const hammingparity = function hammingparity(n) { n -= (n >> 1) & 0x55; n -= (n >> 2) & 0x33; return (n - (n >> 4)) & 0x01; }

// Build up a lookup table for bit patterns -> quaternions const orbit_quaternions = [...range(0x100)].map(b => { let quat = [[1],,,]; if (b & 0x80) quat = quatmul(quat, [,[1],,]); if (b & 0x40) quat = quatmul(quat, [,,[1],]); if (b & 0x20) quat = quatmul(quat, [,,,[1]]);

quat = quatmul(quat, [[,1,2],[-1,,2],[1,-1,2],]);
if (b &amp; 0x10) quat = quatmul(quat, [,,[1],]);
if (b &amp; 0x08) quat = quatmul(quat, [,,,[1]]);

quat = quatmul(quat, [[,1,2],[-1,,2],[1,-1,2],]);
if (b &amp; 0x04) quat = quatmul(quat, [,,[1],]);
if (b &amp; 0x02) quat = quatmul(quat, [,,,[1]]);

if (b &amp; 0x01) quat = quatmul(quat, [,[-1,1,2],[-1,,2],[,-1,2]]);

const sign = quat.map(grsign).reduce((a, b) =&gt; a || b) || 1;
return scalarmul([sign], quat);

});

const v = [[-1, 1], [-1], [, -1]]; // φ⁻ -1 -φ

// Find the orbit and orientation for a vector u. return function orbit2(u) { u = [u[0].slice(), u[1].slice(), u[2].slice()]; // Make a deep copy of 'u'.

// Reduce to the 'kite' shape at the corner of one octant:
const bits = [lt0_abs(u[0]), lt0_abs(u[1]), lt0_abs(u[2])];
u = transform(red_rotation, u); bits.push(lt0_abs(u[1]), lt0_abs(u[2]));
u = transform(red_rotation, u); bits.push(lt0_abs(u[1]), lt0_abs(u[2]));

// Now reflect the top triangle of the kite onto the bottom triangle:
let d = dot(u, v), ds = +grgreater([0], d); bits.push(ds);
d = grmul([-ds, 0, 2], d); u = vectoradd(u, scalarmul(d, v));

const orb = scalarmul(grinv(u[0]), [u[1], u[2]]); // rational coordinates of a gnomonic projection
const bits_int = bits.reduce((a, b) =&gt; (a &lt;&lt; 1) + b);
const rotation = orbit_quaternions[bits_int];
const length = u[0];
const reflected = hamming_parity(bits_int);
return [orb, rotation, reflected, length];

} }```

Scott (scott@vorthmann.org)
2018-09-09 09:21:45

not as bad as I feared... thought you would have 60 lines of lookup table

jrus (me@jacobrus.com)
2018-09-09 09:29:33

@Scott one thing to note: for some edge cases, this picks the triangle on the side which is reflected vs. the standard triangle

Scott (scott@vorthmann.org)
2018-09-09 09:30:50

ok... could be a problem, but not sure

jrus (me@jacobrus.com)
2018-09-09 09:30:58

so often it will report a 'reflection' even when there is some rotation which would send that strut pointed the other way

Scott (scott@vorthmann.org)
2018-09-09 09:31:07

right

jrus (me@jacobrus.com)
2018-09-09 09:31:39

so you just need to always look at the reflected bit before deciding what zone the strut is in

Scott (scott@vorthmann.org)
2018-09-09 09:31:54

ok

jrus (me@jacobrus.com)
2018-09-09 09:32:11

or wait

jrus (me@jacobrus.com)
2018-09-09 09:32:32

yeah

jrus (me@jacobrus.com)
2018-09-09 09:32:35

that's right

Scott (scott@vorthmann.org)
2018-09-09 09:32:39

reflected bit won't affect zone... just whether the strut goes (start,end) or (end,start)

jrus (me@jacobrus.com)
2018-09-09 09:32:52

yes

jrus (me@jacobrus.com)
2018-09-09 09:33:21

basically there are two 'zones' adjacent to any vector on edge between zones, or more for the corners

Scott (scott@vorthmann.org)
2018-09-09 09:33:28

as long as the quaternion matches, should be OK

jrus (me@jacobrus.com)
2018-09-09 09:33:59

the quaternions are different between zones, but they send the vector to the same place

Scott (scott@vorthmann.org)
2018-09-09 09:34:25

I meant quaternion matches reflected bit

jrus (me@jacobrus.com)
2018-09-09 09:34:31

yes

jrus (me@jacobrus.com)
2018-09-09 09:35:15

maybe I should add an optional 'reflect' parameter to quattransform

jrus (me@jacobrus.com)
2018-09-09 09:36:04

though if you need to handle this by flipping which vertex is the start, etc. maybe that's not helpful to you

Scott (scott@vorthmann.org)
2018-09-09 09:36:30

yes, it'll be fine as is

jrus (me@jacobrus.com)
2018-09-09 09:37:39

sometime later, I'll try to normalize all the strut models

Scott (scott@vorthmann.org)
2018-09-09 09:40:02

I think I can output a little more info there, since I have internal normalization already... I still need to check

jrus (me@jacobrus.com)
2018-09-09 09:41:49

@Scott actually, I think I can avoid the edge-case-reflections thing if I record the signs along the way as {–1, 0. 1}, and then if there are any zeros and an odd number of –1s, set one of the zeros to –1

jrus (me@jacobrus.com)
2018-09-09 09:42:36

in that case, vectors on an edge would always be reported as a pure rotation of the canonical vector

Scott (scott@vorthmann.org)
2018-09-09 09:43:13

up to you, I suspect it won't matter

jrus (me@jacobrus.com)
2018-09-09 09:44:14

okay I won't bother for now then

Scott (scott@vorthmann.org)
2018-09-09 09:47:08

@jrus I have accommodated your output change in my resolveModel... now rendering the testResolve result. Still has my scaling problems and the shape orientation issue, but no worries.

Scott (scott@vorthmann.org)
2018-09-09 09:47:14

reshared

Scott (scott@vorthmann.org)
2018-09-09 09:47:20

https://beta.observablehq.com/d/70a3c92c576398bb#parseAlgebraicNumber

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-09 09:48:17

the balls seem to be in the right places

Scott (scott@vorthmann.org)
2018-09-09 09:51:56

I don't know why there is no blue strut... I'll work it out

jrus (me@jacobrus.com)
2018-09-09 10:47:56

@Scott okay I'm going to try to look at your json gists and try to convert the orbits and strut shapes to canonical directions

Scott (scott@vorthmann.org)
2018-09-09 10:48:24

I found the property, just need to export it

Scott (scott@vorthmann.org)
2018-09-09 10:48:38

I have a "canonicalize" orientation index

Scott (scott@vorthmann.org)
2018-09-09 10:48:47

let me update my gist... 10 minutes

jrus (me@jacobrus.com)
2018-09-09 10:49:26

I'll adjust 'unitlength' in the orbit to match vzome after the prototype is scaled

Scott (scott@vorthmann.org)
2018-09-09 10:50:13

in your orbit2 function? or in resolveModel (or equivalent)?

Scott (scott@vorthmann.org)
2018-09-09 10:50:27

I would think we want orbit2 to be vZome-agnostic

jrus (me@jacobrus.com)
2018-09-09 10:50:29

I mean in the "data" defining the orbits

Scott (scott@vorthmann.org)
2018-09-09 10:50:37

oh right

Scott (scott@vorthmann.org)
2018-09-09 10:50:45

anyway, let me get the new JSON

jrus (me@jacobrus.com)
2018-09-09 10:51:22

or maybe the prototype strut should just be adjusted to be in the canonical orbit but have vzome-unit length

jrus (me@jacobrus.com)
2018-09-09 10:51:39

so e.g. blue would be [2,0,0]

Scott (scott@vorthmann.org)
2018-09-09 10:51:41

don't know, haven't thought that through

Scott (scott@vorthmann.org)
2018-09-09 10:54:51

Ok, gist updated

Scott (scott@vorthmann.org)
2018-09-09 10:55:06

each orbit now has the "canonicalize" attribute

Scott (scott@vorthmann.org)
2018-09-09 10:55:40

a negative sign means to apply that rotation matrix, then reverse the sense

jrus (me@jacobrus.com)
2018-09-09 10:55:47

which gist? the icosahedral symmetries one?

Scott (scott@vorthmann.org)
2018-09-09 10:55:50

yes

jrus (me@jacobrus.com)
2018-09-09 10:57:40

btw, simon is now saying "icosahedron", and it's pretty amusing

Scott (scott@vorthmann.org)
2018-09-09 10:58:45

record it!

Scott (scott@vorthmann.org)
2018-09-09 10:58:56

send me a sound bite

jrus (me@jacobrus.com)
2018-09-09 10:59:59

@Scott maybe you want to use 3-integer golden rationals? along the lines of https://gist.github.com/jrus/5995e70f5a6932d0f1b0ed6040415ee5

Scott (scott@vorthmann.org)
2018-09-09 11:00:57

yes, eventually... remember I'm normalizing all that in my notebook

Scott (scott@vorthmann.org)
2018-09-09 11:01:06

you can consume the normalized version, rather than the Gist

jrus (me@jacobrus.com)
2018-09-09 11:01:40

I guess you are generating your gist from java code?

jrus (me@jacobrus.com)
2018-09-09 11:01:57

but I think it's clearer to just hand edit it at this point

jrus (me@jacobrus.com)
2018-09-09 11:02:51

I also think these json blobs are short enough to just go in a notebook cell

Scott (scott@vorthmann.org)
2018-09-09 11:02:53

the gist is exported from vZome

Scott (scott@vorthmann.org)
2018-09-09 11:03:33

they get annoying in a cell... too much scrolling if I open the cell accidentally

jrus (me@jacobrus.com)
2018-09-09 11:04:06

heh

Scott (scott@vorthmann.org)
2018-09-09 11:04:08

I've updated the Gist to display the perms and matrices better... more vertical space, ironically 😉

jrus (me@jacobrus.com)
2018-09-09 11:04:27

it can be a different notebook. "raw zome data" or whatever

Scott (scott@vorthmann.org)
2018-09-09 11:04:28

give me a moment to correct my normalization

Scott (scott@vorthmann.org)
2018-09-09 11:04:33

true

jrus (me@jacobrus.com)
2018-09-09 11:04:37

but a gist is also fine

jrus (me@jacobrus.com)
2018-09-09 11:04:52

I just recommend putting it in the same notebook at the very bottom

jrus (me@jacobrus.com)
2018-09-09 11:08:13

aha, maybe the models themselves are too big to fit in a notebook cell

Scott (scott@vorthmann.org)
2018-09-09 11:08:43

can get long, of course

Scott (scott@vorthmann.org)
2018-09-09 11:08:56

lifelike ball shape is probably long

Scott (scott@vorthmann.org)
2018-09-09 11:09:06

symmetry not so bad, nor most strut shapes

Scott (scott@vorthmann.org)
2018-09-09 11:10:58

ok, reshared

Scott (scott@vorthmann.org)
2018-09-09 11:10:59

https://beta.observablehq.com/d/70a3c92c576398bb#golden_icosahedral_symmetry

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-09 11:11:36

I'll incorporate the "canonicalize" into convertShapes

Scott (scott@vorthmann.org)
2018-09-09 11:12:01

and convertVSON

Scott (scott@vorthmann.org)
2018-09-09 11:12:18

so vZome models match vZome shapes

Scott (scott@vorthmann.org)
2018-09-09 11:12:46

but I think now I have to go shopping for garden stuff with Bella

jrus (me@jacobrus.com)
2018-09-09 11:13:22

cheers

jrus (me@jacobrus.com)
2018-09-09 11:13:39

bella is your wife? (I didn't really get to chat with her)

Scott (scott@vorthmann.org)
2018-09-09 11:14:00

yes, or Flori... (Florelia in fact)

Scott (scott@vorthmann.org)
2018-09-09 11:14:15

we'll get another chance, next time we come up to the city

Scott (scott@vorthmann.org)
2018-09-09 11:14:22

later

jrus (me@jacobrus.com)
2018-09-09 11:22:33

@Scott btw, when you do foo.map(x => bar(x)), you can instead just write foo.map(bar)

jrus (me@jacobrus.com)
2018-09-09 11:23:13

(though admittedly the former one makes it easier to add stuff to the map function later)

jrus (me@jacobrus.com)
2018-09-09 11:24:07

I definitely am glad that javascript added the arrow functions. it used to be foo.map(function (x) { return bar(x); })

Scott (scott@vorthmann.org)
2018-09-09 11:25:41

Oh duh

jrus (me@jacobrus.com)
2018-09-09 11:32:02

@Scott oh let's adjust parseAlgebraicNumber so that it can handle 3-element numbers as well

jrus (me@jacobrus.com)
2018-09-09 11:32:08

function parseAlgebraicNumber([a0, a1, ad=1]) { let d0 = 1, d1 = 1; if (!(typeof a0 === "number")) [a0, d0] = a0.split('/').map(Number); if (!(typeof a1 === "number")) [a1, d1] = a1.split('/').map(Number); return simplify3(a0**d1, a1**d0, d0**d1**ad); }

jrus (me@jacobrus.com)
2018-09-09 11:32:29

or better function parseAlgebraicNumber([a0=0, a1=0, ad=1]) { let d0 = 1, d1 = 1; if (!(typeof a0 === "number")) [a0, d0] = a0.split('/').map(Number); if (!(typeof a1 === "number")) [a1, d1] = a1.split('/').map(Number); return simplify3(a0**d1, a1**d0, d0**d1**ad); }

jrus (me@jacobrus.com)
2018-09-09 11:33:18

then if you convert some of the numbers in your json, it won't care

Scott (scott@vorthmann.org)
2018-09-09 11:39:48

Sounds good

jrus (me@jacobrus.com)
2018-09-09 12:08:26

@Scott okay, not yet rotated to standard form, but all in 3-value integer form https://gist.github.com/jrus/5995e70f5a6932d0f1b0ed6040415ee5#file-solid_connectors-json

jrus (me@jacobrus.com)
2018-09-09 12:10:58

maybe it's better to just leave the vertices for each one on a single line in the file though, dunno...

Scott (scott@vorthmann.org)
2018-09-09 12:21:17

I already had convertShapes... Something else? Not at my computer (shopping==waiting)

jrus (me@jacobrus.com)
2018-09-09 12:22:29

I'm going to rotate all of the shapes to align with a canonical-triangle-oriented strut

jrus (me@jacobrus.com)
2018-09-09 12:23:26

the only 'something else' is me trying to make the json human-legible, but maybe that's not useful

jrus (me@jacobrus.com)
2018-09-09 13:01:36

@Scott okay I indexed by orbit coordinates, rotated all the vertices, and put all the prototype vectors in [1, a, b] form https://gist.github.com/jrus/5995e70f5a6932d0f1b0ed6040415ee5#file-solid_connectors_normalized-json

Scott (scott@vorthmann.org)
2018-09-09 13:05:35

ok looking

jrus (me@jacobrus.com)
2018-09-09 13:06:13

@Scott it's possible that I rotated the vertices to the wrong direction or something. I'll have to try actually drawing some models 🙂

Scott (scott@vorthmann.org)
2018-09-09 13:06:48

did you look at my converted shapes? I think they were only missing the rotation

Scott (scott@vorthmann.org)
2018-09-09 13:07:06

also I renamed fullScaleVertices to "tip" and halfScaleVertices to "waist"

jrus (me@jacobrus.com)
2018-09-09 13:07:09

yeah. but those are still indexed by name right?

Scott (scott@vorthmann.org)
2018-09-09 13:07:16

no

jrus (me@jacobrus.com)
2018-09-09 13:07:20

oh, gotcha

Scott (scott@vorthmann.org)
2018-09-09 13:07:23

already indexed the same way

jrus (me@jacobrus.com)
2018-09-09 13:07:25

cool

jrus (me@jacobrus.com)
2018-09-09 13:07:38

lunchtime, bb30

Scott (scott@vorthmann.org)
2018-09-09 13:07:44

seeya

jrus (me@jacobrus.com)
2018-09-09 13:16:32

okay, only took10m to eat a sandwich

Scott (scott@vorthmann.org)
2018-09-09 13:17:43

I want to update convertShapes to do the rotations... can you share the code you used to generate?

jrus (me@jacobrus.com)
2018-09-09 13:22:06

{ const shapejson = JSON.parse(JSON.stringify(solid_connectors)); // deep copy const outstruts = {} for (const name in shapejson.strutGeometries) { const strut = shapejson.strutGeometries[name]; const [orb, rotation, reflected, length] = orbit2(strut.prototypeVector); const vertices = strut.vertices.map(v =&gt; { v = quattransform(quatconj(rotation), v); if (reflected) v = scalarmul([-1], v); return v; }) const outstrut = Object.assign({'name': name}, strut, { 'vertices': vertices, 'prototypeVector': [[1,0,0]].concat(orb)}); outstruts[JSON.stringify(orb)] = outstrut; } return outstruts; }

jrus (me@jacobrus.com)
2018-09-09 13:22:09

scott -^

jrus (me@jacobrus.com)
2018-09-09 13:22:24

@Scott that one isn't doing the parseAlgebraicNumber stuff

Scott (scott@vorthmann.org)
2018-09-09 13:23:16

np, got that already.... just cherry-picking pieces of it

Scott (scott@vorthmann.org)
2018-09-09 13:44:13

hmmm... @jrus neither of our notebooks are loading for me. Have we introduced a cycle?

Scott (scott@vorthmann.org)
2018-09-09 13:44:25

it would complain, I would expect

jrus (me@jacobrus.com)
2018-09-09 13:44:38

try refresh?

Scott (scott@vorthmann.org)
2018-09-09 13:44:52

yes, done that... trying again

jrus (me@jacobrus.com)
2018-09-09 13:45:11

it loads for me ... dunno...

jrus (me@jacobrus.com)
2018-09-09 13:45:41

you can also load in /safe mode

Scott (scott@vorthmann.org)
2018-09-09 13:45:46

yes, reload is stuck... restarting Chrome

jrus (me@jacobrus.com)
2018-09-09 13:45:48

by appending that to the URL

Scott (scott@vorthmann.org)
2018-09-09 13:45:55

ok, trying that

Scott (scott@vorthmann.org)
2018-09-09 13:46:20

disables execution?

jrus (me@jacobrus.com)
2018-09-09 13:46:25

right

jrus (me@jacobrus.com)
2018-09-09 13:46:38

if you have a big screen or two screens, I also recommend opening two windows

jrus (me@jacobrus.com)
2018-09-09 13:46:42

and editing in safe mode

jrus (me@jacobrus.com)
2018-09-09 13:46:48

while viewing results in the other

Scott (scott@vorthmann.org)
2018-09-09 13:46:57

cute

jrus (me@jacobrus.com)
2018-09-09 13:47:04

safe mode has all the editor boxes showing all the time

jrus (me@jacobrus.com)
2018-09-09 13:47:12

so you can then tick them closed in the view side if you want

Scott (scott@vorthmann.org)
2018-09-09 13:47:20

right

jrus (me@jacobrus.com)
2018-09-09 13:47:36

[I personally use this trick sometimes but not usually]

jrus (me@jacobrus.com)
2018-09-09 13:47:55

the /safe mode is also useful for searching

jrus (me@jacobrus.com)
2018-09-09 13:48:14

since browsers seem to not search hidden text

Scott (scott@vorthmann.org)
2018-09-09 13:48:39

yes, I've struggled with search... another good reason

Scott (scott@vorthmann.org)
2018-09-09 13:50:39

lol... you put in "x" to mark code you're not ready to compile yet?

jrus (me@jacobrus.com)
2018-09-09 13:50:58

it just disables evaluation of the cell by causing a syntax error

Scott (scott@vorthmann.org)
2018-09-09 13:51:08

yes, nice trick

jrus (me@jacobrus.com)
2018-09-09 13:51:12

stuff that has a big blob of output I don't want to see, etc.

jrus (me@jacobrus.com)
2018-09-09 13:51:25

or stuff that I broke, but don't want to completely delete yet

jrus (me@jacobrus.com)
2018-09-09 14:13:42

oh, I should start using Object.entries(obj).forEach( ([key, value]) => ... );

Scott (scott@vorthmann.org)
2018-09-09 14:14:22

I was looking for that idiom, thank you

jrus (me@jacobrus.com)
2018-09-09 14:14:39

and Object.entries(foo).map

jrus (me@jacobrus.com)
2018-09-09 14:22:58

e.g. { const shapejson = JSON.parse(JSON.stringify(solid_connectors)); // deep copy return Object.entries(shapejson.strutGeometries).map(([name, strut]) =&gt; { const [orb, rotation, reflected, length] = orbit2(strut.prototypeVector); const vertices = strut.vertices.map(v =&gt; { v = quattransform(quatconj(rotation), v); return (reflected) ? scalarmul([-1], v) : v; }) const outstrut = Object.assign( {'name': name}, strut, {'vertices': vertices, 'prototypeVector': [[1,0,0]].concat(orb)}); return [JSON.stringify(orb), outstrut]; }).reduce((map, [key, val]) =&gt; (map[key] = val, map), {}); }

Scott (scott@vorthmann.org)
2018-09-09 14:23:46

yes, I'm doing the same thing

Scott (scott@vorthmann.org)
2018-09-09 14:24:06

roughly

jrus (me@jacobrus.com)
2018-09-09 14:35:39

@Scott maybe this is too illegible:

icosahedral_quaternions_vzome2 = { const one = [[1],,,], h = [1,,2], blue = [one, [,[1],,], [,,,[1]], [,,[1],]], yellow = [one, [h, h, h, h], [[-1,,2], h, h, h]], red = [one, [[,1,2], h, [-1,1,2],]]; for (let i = 2; i &lt; 5; i++) red[i] = quatmul(red[i-1], red[1]); return [...(function **() { for (let b of blue) for (let r of red) for (let y of yellow) yield quatnormalize(quatmul(b, quatmul(y, r))); })()]; }

Scott (scott@vorthmann.org)
2018-09-09 14:36:35

why the yield? you want a generator?

jrus (me@jacobrus.com)
2018-09-09 14:36:50

because I want to use the for of loops

jrus (me@jacobrus.com)
2018-09-09 14:38:15

otherwise I can do like Object.entries(blue).map(b => Object.entries(red).map(r => Object.entries(yellow).map(y => ...)), but that is kind of ugly

jrus (me@jacobrus.com)
2018-09-09 14:38:38

then I still would need to flatten that at the end

Scott (scott@vorthmann.org)
2018-09-09 14:38:49

is there a difference in the output, or you're just refining the implementation?

jrus (me@jacobrus.com)
2018-09-09 14:39:09

oh, the output should be the same as, icosahedral_quaternions_vzome = { const one = [[1],,,], h = [1,,2], blue = [one, [,[1],,], [,,,[1]], [,,[1],]], yellow = [one, [h, h, h, h], [[-1,,2], h, h, h]], red = [one, [[,1,2], h, [-1,1,2],]]; for (let i = 2; i &lt; 5; i++) red[i] = quatmul(red[i-1], red[1]); const output = []; let b, r, y; for (b of blue) for (r of red) for (y of yellow) { const q = quatmul(b, quatmul(y, r)); output.push(scalarmul([grsign(q[0]) || grsign(q[1]) || 1], q)); } return output; }

Scott (scott@vorthmann.org)
2018-09-09 14:39:17

not judging, just trying to understand

jrus (me@jacobrus.com)
2018-09-09 14:39:19

which is definitely more comprehensible 🙂

jrus (me@jacobrus.com)
2018-09-09 14:40:00

I'm just trying to figure out how these javascript features work mostly

Scott (scott@vorthmann.org)
2018-09-09 14:40:15

ok

Scott (scott@vorthmann.org)
2018-09-09 14:41:07

the vzome2 version does not have the scalarmul... not necessary?

jrus (me@jacobrus.com)
2018-09-09 14:41:34

oh, I put it in quatnormalize

jrus (me@jacobrus.com)
2018-09-09 14:41:37

icosahedral_quaternions_vzome = { const one = [[1],,,], h = [1,,2], blue = [one, [,[1],,], [,,,[1]], [,,[1],]], yellow = [one, [h, h, h, h], [[-1,,2], h, h, h]], red = [one, [[,1,2], h, [-1,1,2],]]; for (let i = 2; i &lt; 5; i++) red[i] = quatmul(red[i-1], red[1]); const output = []; let b, r, y; for (b of blue) for (r of red) for (y of yellow) output.push(quatnormalize(quatmul(b, quatmul(y, r)))); return output; }

Scott (scott@vorthmann.org)
2018-09-09 14:41:43

got it

jrus (me@jacobrus.com)
2018-09-09 14:41:51

I think it's better to skip the generator thingy

Scott (scott@vorthmann.org)
2018-09-09 14:42:20

I agree... the output.push is pretty clear

jrus (me@jacobrus.com)
2018-09-09 14:42:22

I'm just playing with it

jrus (me@jacobrus.com)
2018-09-09 14:42:25

anyhow

jrus (me@jacobrus.com)
2018-09-09 14:42:34

how's it going? anything I should work on?

Scott (scott@vorthmann.org)
2018-09-09 14:42:55

maybe make your shape normalizer match the contract for vZomeRenderer

Scott (scott@vorthmann.org)
2018-09-09 14:43:24

I want to keep playing with my convertShapes, but just for learning

Scott (scott@vorthmann.org)
2018-09-09 14:43:57

see the shapes as currently pre-converted on my page... tip, waist, etc. name changes

jrus (me@jacobrus.com)
2018-09-09 14:44:33

so I should take in whatever format vzome generates, and spit out a normalized version?

Scott (scott@vorthmann.org)
2018-09-09 14:45:02

we just need to merge your code and my code

Scott (scott@vorthmann.org)
2018-09-09 14:45:53

convertJson is already doing everything except the reorientation

Scott (scott@vorthmann.org)
2018-09-09 14:46:32

if you like, rewrite convertJson in your own style, matching its input and output formats

Scott (scott@vorthmann.org)
2018-09-09 14:46:59

input format is raw shapes JSON from vZome

jrus (me@jacobrus.com)
2018-09-09 14:47:31

okay I'll take a look

Scott (scott@vorthmann.org)
2018-09-09 14:47:37

output format is what you see in https://beta.observablehq.com/d/70a3c92c576398bb#icosahedral_solid_connectors_shapes

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-09 14:47:38

@Scott I think I'll fork your notebook

Scott (scott@vorthmann.org)
2018-09-09 14:47:44

sure

jrus (me@jacobrus.com)
2018-09-09 14:47:51

I keep getting sidetracked

Scott (scott@vorthmann.org)
2018-09-09 14:47:57

just did one last reshare

jrus (me@jacobrus.com)
2018-09-09 14:48:19

but hopefully by the end of today we can get a list of strut endpoints rendering as a model

Scott (scott@vorthmann.org)
2018-09-09 14:48:38

yes, I think we are close enough

Scott (scott@vorthmann.org)
2018-09-09 14:49:08

note that we have it already... just not rendering correctly 😉

jrus (me@jacobrus.com)
2018-09-09 14:49:18

then we can start to e.g. transcribe some old Zome documents into new notebooks

Scott (scott@vorthmann.org)
2018-09-09 14:49:37

yes

Scott (scott@vorthmann.org)
2018-09-09 14:49:57

gotta do some real-world stuff... will be in and out

Scott (scott@vorthmann.org)
2018-09-09 14:51:28

resolveModel is the function we're after, it just doesn't work correctly yet

Scott (scott@vorthmann.org)
2018-09-09 14:51:54

please ignore blue_struts

jrus (me@jacobrus.com)
2018-09-09 14:52:19

okay, I'll get some more coffee and get to it

jrus (me@jacobrus.com)
2018-09-09 14:52:32

you published your most recent version?

jrus (me@jacobrus.com)
2018-09-09 14:52:38

so you said. got it

jrus (me@jacobrus.com)
2018-09-09 15:29:03

@Scott okay I'm making this function a bit flatter: ```function convertShapes(shapes) { const strutShapes = {}; for (const name of shapes.strutGeometries) { const shape = shapes.strutGeometries[name]; const proto = parseAlgebraicVector(shape.prototypeVector); const [orb, rotation, reflected, length] = orbit2(proto);

strutShapes[JSON.stringify(orb)] = {
  color: name,
  prototype: parseAlgebraicVector( shape.prototypeVector ),
  vertices: shape.vertices.map(parseAlgebraicVector),
  polygons: shape.polygons,
  tip: shape.fullScaleVertices,
  waist: shape.halfScaleVertices
};

}

const ballVertices = shapes.connectorShape.vertices.map(parseAlgebraicVector) const ballShape = Object.assign({}, shapes.connectorShape, {vertices: ballVertices});

return {name: shapes.name, ballShape: ballShape, strutShapes: strutShapes}; }```

jrus (me@jacobrus.com)
2018-09-09 15:29:31

now I can figure out more easily where to put the rotation

Scott (scott@vorthmann.org)
2018-09-09 15:31:53

looks good

Scott (scott@vorthmann.org)
2018-09-09 15:32:25

I've gone a bit "all in" on map and reduce... need to back away, yes

Scott (scott@vorthmann.org)
2018-09-09 15:32:39

for-of is just fine

jrus (me@jacobrus.com)
2018-09-09 15:33:16

I think I can cut some of my own lispy code too

jrus (me@jacobrus.com)
2018-09-09 15:33:45

imperative code can be clearer when the functional code gets too deeply nested

jrus (me@jacobrus.com)
2018-09-09 15:33:55

giving names to things is helpful

jrus (me@jacobrus.com)
2018-09-09 15:39:00

oops, should be for-in for objects

jrus (me@jacobrus.com)
2018-09-09 15:40:45

also I did something that causes an infinite loop. should figure that one out 🙂

Scott (scott@vorthmann.org)
2018-09-09 15:41:30

I'm good at that part

Scott (scott@vorthmann.org)
2018-09-09 15:42:11

I wonder if I was causing the same loop

jrus (me@jacobrus.com)
2018-09-09 15:44:28

something about looping through the vertices

jrus (me@jacobrus.com)
2018-09-09 15:44:29

maybe?

jrus (me@jacobrus.com)
2018-09-09 15:45:16

oh I think my problem was notdoing the parseAlgebraicVector thingy

Scott (scott@vorthmann.org)
2018-09-09 15:45:50

that'll do it

Scott (scott@vorthmann.org)
2018-09-09 15:46:07

not sure why, but I've been bitten a few times

jrus (me@jacobrus.com)
2018-09-09 15:46:30

I should figureout why my quattransform or whatever doesn't just error out on those

Scott (scott@vorthmann.org)
2018-09-09 15:47:05

could be my rendering code, too

jrus (me@jacobrus.com)
2018-09-09 15:47:20

no, I wasn't letting it get that far

jrus (me@jacobrus.com)
2018-09-09 15:48:22

@Scott now no struts render at all 🙂

jrus (me@jacobrus.com)
2018-09-09 15:49:41

but at least no infinite loops

Scott (scott@vorthmann.org)
2018-09-09 15:50:49

yes, got rid of that pesky yellow

jrus (me@jacobrus.com)
2018-09-09 15:51:04

you got rid of it? or I just made it disappear?

Scott (scott@vorthmann.org)
2018-09-09 15:51:13

was joke

jrus (me@jacobrus.com)
2018-09-09 15:51:17

cool

Scott (scott@vorthmann.org)
2018-09-09 15:51:30

you made it disappear... it went where the blue one is

Scott (scott@vorthmann.org)
2018-09-09 15:51:55

I can do some debugging

jrus (me@jacobrus.com)
2018-09-09 15:52:03

@Scott so I think the shapes might be right now (or maybe not)

jrus (me@jacobrus.com)
2018-09-09 15:52:16

but if code was expecting the previous orientations

jrus (me@jacobrus.com)
2018-09-09 15:52:32

it will need to switch to expecting default orientation

Scott (scott@vorthmann.org)
2018-09-09 15:52:37

it would be for my converted models, but for the testResolve it should work

jrus (me@jacobrus.com)
2018-09-09 15:53:19

okay let me look at resolveModel then

Scott (scott@vorthmann.org)
2018-09-09 15:53:28

as I mentioned earlier, with shapes now canonical, I'll need to update my convertVSON to normalize, too

Scott (scott@vorthmann.org)
2018-09-09 15:54:10

could be a dumb offset thing

jrus (me@jacobrus.com)
2018-09-09 15:54:14

also, the 'length' might be wrong

Scott (scott@vorthmann.org)
2018-09-09 15:54:19

I'm sure you'll see many improvements

Scott (scott@vorthmann.org)
2018-09-09 15:54:39

yes, the length is almost certainly wrong, since it was wrong before

Scott (scott@vorthmann.org)
2018-09-09 15:54:57

try scaling up 3 powers of phi, to see if it renders

Scott (scott@vorthmann.org)
2018-09-09 15:55:14

sometimes you get struts rendered inside the ball

jrus (me@jacobrus.com)
2018-09-09 15:55:17

uh... what's this part about? orientation: model.quaternions.length,

Scott (scott@vorthmann.org)
2018-09-09 15:55:39

the quats are indexed... that is setting the index

jrus (me@jacobrus.com)
2018-09-09 15:55:52

oh I see

Scott (scott@vorthmann.org)
2018-09-09 15:55:55

it is not beautiful code, I'm sure you can find many improvements

jrus (me@jacobrus.com)
2018-09-09 15:55:59

it just always adds stuff on the end

jrus (me@jacobrus.com)
2018-09-09 15:56:01

no dedup

Scott (scott@vorthmann.org)
2018-09-09 15:56:04

yes

jrus (me@jacobrus.com)
2018-09-09 15:56:08

that's fine then

Scott (scott@vorthmann.org)
2018-09-09 15:57:30

huh, I thought I handled "reflected", but I don't see it

Scott (scott@vorthmann.org)
2018-09-09 15:57:35

must have reverted it

jrus (me@jacobrus.com)
2018-09-09 15:57:49

should work to do start: model.vertices.length + reflected

jrus (me@jacobrus.com)
2018-09-09 15:58:31

anyway, let me look at what a working model looks like

Scott (scott@vorthmann.org)
2018-09-09 15:58:47

ok

jrus (me@jacobrus.com)
2018-09-09 15:58:58

@Scott this is hilarious after I changed the prototypes

Scott (scott@vorthmann.org)
2018-09-09 15:59:18

?

jrus (me@jacobrus.com)
2018-09-09 15:59:42

or maybe after I rotated the vertices

jrus (me@jacobrus.com)
2018-09-09 16:00:18

all the old models look silly

Scott (scott@vorthmann.org)
2018-09-09 16:00:41

right, they are missing the normalization that we did for convertShapes

Scott (scott@vorthmann.org)
2018-09-09 16:00:47

but they have struts!

jrus (me@jacobrus.com)
2018-09-09 16:15:50

@Scott maybe you can help me out. I'm not exactly sure where I should be looking

jrus (me@jacobrus.com)
2018-09-09 16:16:31

does it matter that in the 'symmetry' object the orbits are indexed by color name?

jrus (me@jacobrus.com)
2018-09-09 16:17:04

maybe it was trying to look that up instead of looking up the orbit coordinates?

jrus (me@jacobrus.com)
2018-09-09 16:17:44

while I was at it I flattened that one too: ```function convertSymmetry(s) { const matrices = s.symmetry.matrices.map(m => m.map(parseAlgebraicVector)); const symmetry = Object.assign({}, s.symmetry, {matrices: matrices});

const orbits = {}; for (const orbit of s.orbits) { const prototype = parseAlgebraicVector(orbit.prototype); const canonical = JSON.stringify(orbit2(prototype)[0]); orbits[orbit.name] = { canonical: canonical, unitLength: parseAlgebraicNumber(orbit.unitLength), prototype: prototype, canonicalize: orbit.canonicalize }; }

return Object.assign({}, s, {symmetry: symmetry, orbits: orbits}); }```

jrus (me@jacobrus.com)
2018-09-09 16:26:12

@Scott this yellow strut is hilarious https://beta.observablehq.com/d/b30f26a5f6143d40

Scott (scott@vorthmann.org)
2018-09-09 16:37:43

yes... we'll call it a participation ribbon

Scott (scott@vorthmann.org)
2018-09-09 16:38:09

the converted symmetry object has orbits indexed canonically

Scott (scott@vorthmann.org)
2018-09-09 16:38:48

flattened looks good

Scott (scott@vorthmann.org)
2018-09-09 16:43:07

speaking of flattening, there is no reason that symmetry needs a nested symmetry object... that is an artifact of the export

Scott (scott@vorthmann.org)
2018-09-09 16:44:18

oh, sorry!

Scott (scott@vorthmann.org)
2018-09-09 16:44:44

I left symmetry indexed by name on purpose, because it is only used in convertVSON

Scott (scott@vorthmann.org)
2018-09-09 16:44:55

we don't need it for resolveModel

jrus (me@jacobrus.com)
2018-09-09 16:45:34

yeah that's fine

Scott (scott@vorthmann.org)
2018-09-09 16:48:38

we need to look up canonical orbit names in convertVSON, so we need it indexed by name

jrus (me@jacobrus.com)
2018-09-09 16:48:50

gotcha

Scott (scott@vorthmann.org)
2018-09-09 17:28:09

@jrus why do you use the syntax "convertSymmetry = function convertSymmetry(..."?

Scott (scott@vorthmann.org)
2018-09-09 17:28:27

just the function will bind as the cell name, without the "convertSymmetry ="

Scott (scott@vorthmann.org)
2018-09-09 17:28:37

something I'm missing?

jrus (me@jacobrus.com)
2018-09-09 17:28:50

I like it because it makes the name the first thing in the cell text

Scott (scott@vorthmann.org)
2018-09-09 17:28:56

I see

jrus (me@jacobrus.com)
2018-09-09 17:29:10

I could stop doing that :)

Scott (scott@vorthmann.org)
2018-09-09 17:29:10

then you could use "convertSymmetry = function(..."

jrus (me@jacobrus.com)
2018-09-09 17:29:14

I also hate hoisting

jrus (me@jacobrus.com)
2018-09-09 17:29:33

so doing it this way keeps me consistent vs. other parts of my code

Scott (scott@vorthmann.org)
2018-09-09 17:29:38

OK

jrus (me@jacobrus.com)
2018-09-09 17:29:43

it's not really necessary though

Scott (scott@vorthmann.org)
2018-09-09 17:29:46

I knew you'd have a reason

jrus (me@jacobrus.com)
2018-09-09 17:29:53

it's not necessarily a good reason

jrus (me@jacobrus.com)
2018-09-09 17:32:11

@Scott also sorry I keep mangling your whitespace :)

jrus (me@jacobrus.com)
2018-09-09 17:33:22

I'm still not sure what the deal is with the geometry being all broken. I should be doing deliberate debugging instead of just fiddling with unnecessary nonsense

Scott (scott@vorthmann.org)
2018-09-09 17:34:03

I'm moving toward that... syncing with your convert functions

jrus (me@jacobrus.com)
2018-09-09 17:41:22

@Scott I sort of know what I have to do to debug this, but I'm procrastinating. probably because it seems like it's going to take more mental energy

Scott (scott@vorthmann.org)
2018-09-09 17:41:39

take a break, I'm on duty

jrus (me@jacobrus.com)
2018-09-09 17:42:39

the thing to do is (1) look at the vertices of some strut in a weird orbit (2) figure out where they should be for a reoriented strut (i.e. in canonical triangle)

Scott (scott@vorthmann.org)
2018-09-09 17:42:46

I could never do the equivalent vZome debugging without my handy dodec key. Yes, it takes focus and energy

jrus (me@jacobrus.com)
2018-09-09 17:42:53

(3) see if that's where they end up

Scott (scott@vorthmann.org)
2018-09-09 17:43:42

I'm going to start with just rendering the strut shape for a few orbits

jrus (me@jacobrus.com)
2018-09-09 17:43:44

I think I should take bits of your code and put them in new cells without as much indirection

Scott (scott@vorthmann.org)
2018-09-09 17:43:53

make sure they all look to be in the right place

Scott (scott@vorthmann.org)
2018-09-09 17:44:01

yes, I had the same idea

jrus (me@jacobrus.com)
2018-09-09 17:44:05

as it is, if I change one cell, that thing is a function that gets called somewhere else

Scott (scott@vorthmann.org)
2018-09-09 17:44:07

too much going on at once, hard to debug

jrus (me@jacobrus.com)
2018-09-09 17:44:14

so hunting the output takes more energy

Scott (scott@vorthmann.org)
2018-09-09 17:44:17

yes

jrus (me@jacobrus.com)
2018-09-09 17:44:52

https://beta.observablehq.com/d/b30f26a5f6143d40/safe

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-09 17:45:15

I made the big json blobs a bit easier to scroll past :)

Scott (scott@vorthmann.org)
2018-09-09 17:46:14

just reformatting the JSON text?

Scott (scott@vorthmann.org)
2018-09-09 17:46:21

or something trickier?

jrus (me@jacobrus.com)
2018-09-09 17:46:21

just moving whitespace around

Scott (scott@vorthmann.org)
2018-09-09 17:46:25

ok

Scott (scott@vorthmann.org)
2018-09-09 17:46:33

works for me

jrus (me@jacobrus.com)
2018-09-09 17:46:55

they still take the first half of the height of the page, but anyway :)

jrus (me@jacobrus.com)
2018-09-09 17:47:31

I made you a THREEVector3 = function THREEVector3([x,y,z]) { return new THREE.Vector3(grfloat(x), grfloat(y), grfloat(z)); } function

Scott (scott@vorthmann.org)
2018-09-09 17:47:47

nice

jrus (me@jacobrus.com)
2018-09-09 17:47:59

which doesn't use any higher-order thingies, because I'm not sure how often you might call it

jrus (me@jacobrus.com)
2018-09-09 17:48:24

though extra function calls probably aren't going to be the bottleneck ever

Scott (scott@vorthmann.org)
2018-09-09 17:48:36

true

jrus (me@jacobrus.com)
2018-09-09 17:49:07

it could also be THREEVector3 = function THREEVector3(v) { return new THREE.Vector3(...v.map(grfloat)); }

Scott (scott@vorthmann.org)
2018-09-09 17:49:15

Paul Hildebrandt is in the hospital with a broken hip

jrus (me@jacobrus.com)
2018-09-09 17:49:23

:(

Scott (scott@vorthmann.org)
2018-09-09 17:49:45

had surgery, resting now

jrus (me@jacobrus.com)
2018-09-09 17:49:56

I hope he recovers fully and quickly

Scott (scott@vorthmann.org)
2018-09-09 17:49:56

he's pretty young for that injury

jrus (me@jacobrus.com)
2018-09-09 17:50:20

I know some 20-somthings who broke hips skiing or the like... it can certainly happen

Scott (scott@vorthmann.org)
2018-09-09 17:50:53

he just regained control of Zometool last month... stockholder's meeting elected a new board, and somehow voted Carlos out of the presidency

jrus (me@jacobrus.com)
2018-09-09 17:51:03

I don't know carlos

Scott (scott@vorthmann.org)
2018-09-09 17:51:04

sure... just fall without catching

jrus (me@jacobrus.com)
2018-09-09 17:51:08

I hope zometool is doing okay

jrus (me@jacobrus.com)
2018-09-09 17:51:15

I should maybe buy some more white struts

Scott (scott@vorthmann.org)
2018-09-09 17:51:18

nice guy, but they have been at loggerheads

Scott (scott@vorthmann.org)
2018-09-09 17:51:45

I think they both did some iffy moves, it escalated, they lawyered-up, ...

Scott (scott@vorthmann.org)
2018-09-09 17:51:53

hopefully this resolves it

jrus (me@jacobrus.com)
2018-09-09 17:51:56

oh that's unfortunate

jrus (me@jacobrus.com)
2018-09-09 17:52:01

I can't imagine anyone is making a fortune from zometool

Scott (scott@vorthmann.org)
2018-09-09 17:52:17

no, not even close... that always hurt Marc.

jrus (me@jacobrus.com)
2018-09-09 17:52:33

they have kept it going though, which is pretty impressive

Scott (scott@vorthmann.org)
2018-09-09 17:52:44

yes, with very thin margins

jrus (me@jacobrus.com)
2018-09-09 17:53:04

too bad schools don't have more budget for materials (except "high technology" nonsense)

jrus (me@jacobrus.com)
2018-09-09 17:53:46

a lot of high school math classes would benefit from large amounts of available zometools, among other construction materials

Scott (scott@vorthmann.org)
2018-09-09 17:53:59

yes. Even so, I think Zometool is a bit of a time drain... too much play, hard to fit into a lesson plan

jrus (me@jacobrus.com)
2018-09-09 17:54:23

depends on what the purpose of the class is

Scott (scott@vorthmann.org)
2018-09-09 17:54:45

yes. I think i've learned more math writing the code than using Zometool. 😉

jrus (me@jacobrus.com)
2018-09-09 17:54:49

I think kids will learn more from doing nothing but building zome shapes for a month than whatever else they were planning to do :)

Scott (scott@vorthmann.org)
2018-09-09 17:55:14

it certainly is more engaging than symbols on a page

Scott (scott@vorthmann.org)
2018-09-09 18:08:54

@jrus identity quaternion is [1,0,0,0] right?

jrus (me@jacobrus.com)
2018-09-09 18:09:01

yes

jrus (me@jacobrus.com)
2018-09-09 18:09:15

@Scott this thing is going to pick somewhat funny ones for edges/corners

jrus (me@jacobrus.com)
2018-09-09 18:09:31

but they should be overlapping the original

Scott (scott@vorthmann.org)
2018-09-09 18:10:16

as long as they render OK, it doesn't bother me... if we had some other code we wanted to consume it, maybe I'd care more.

jrus (me@jacobrus.com)
2018-09-09 18:11:11

if we super cared we could pick our favorite quaternion for each aliased direction and treat each corner and each side separately

Scott (scott@vorthmann.org)
2018-09-09 18:12:37

true

jrus (me@jacobrus.com)
2018-09-09 18:13:40

@Scott https://beta.observablehq.com/@jrus/zome-arithmetic#normalized_blue_vertices

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-09 18:14:30

@Scott so we end up having the vertices in a different order here e.g.

Scott (scott@vorthmann.org)
2018-09-09 18:15:46

so the normalization is scrambling the order?

jrus (me@jacobrus.com)
2018-09-09 18:17:09

I think it is reflecting everything across the z axis

jrus (me@jacobrus.com)
2018-09-09 18:17:59

based on a 180° rotation about z followed by reflection

jrus (me@jacobrus.com)
2018-09-09 18:18:19

@Scott does having the geometry inside out have ill effects?

jrus (me@jacobrus.com)
2018-09-09 18:20:12

I don't think that could explain the oddness with the yellow strut though

Scott (scott@vorthmann.org)
2018-09-09 18:21:19

Afk

jrus (me@jacobrus.com)
2018-09-09 18:21:23

okay

jrus (me@jacobrus.com)
2018-09-09 18:22:08

since we only need to canonicalize once for the built-in shapes, we could also just explicitly put what rotation to do

jrus (me@jacobrus.com)
2018-09-09 18:22:14

for each one

jrus (me@jacobrus.com)
2018-09-09 18:22:28

i.e. do the rotation "manually"

Scott (scott@vorthmann.org)
2018-09-09 18:48:16

true

jrus (me@jacobrus.com)
2018-09-09 18:48:33

@Scott ok I think that flipping the blue strut inside out made it disappear

Scott (scott@vorthmann.org)
2018-09-09 18:48:51

if you have a ball, the blue strut is probably inside. My blue strut did that

jrus (me@jacobrus.com)
2018-09-09 18:48:57

if I get rid of my normalization code https://beta.observablehq.com/d/b30f26a5f6143d40

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-09 18:49:02

handcrafted = { return { vertices: [[[0,0,1],[0,0,1],[0,0,1]]], quaternions: [[[1,0,1],[0,0,1],[0,0,1],[0,0,1]]], balls: [ 0 ], struts: [ { start: 0, orbit: "[[0,0,1],[0,0,1]]", orientation: 0, length: [1] } ] }; }

Scott (scott@vorthmann.org)
2018-09-09 18:49:19

try rendering that... should get a blue strut inside a ball... then remove the ball

Scott (scott@vorthmann.org)
2018-09-09 18:50:39

the blue is right, of course... normalization should have no effect on blue, which already has an x-axis prototype

Scott (scott@vorthmann.org)
2018-09-09 18:51:14

your blue, that is

jrus (me@jacobrus.com)
2018-09-09 18:52:26

so we should maybe just add a manual entry with the orientation # (or quaternion) to use to rotate a strut around to the standard orbit

Scott (scott@vorthmann.org)
2018-09-09 18:52:54

well, that's what "canonicalize" does

Scott (scott@vorthmann.org)
2018-09-09 18:53:03

you're computing the normalization quaternion?

jrus (me@jacobrus.com)
2018-09-09 18:53:06

okay. maybe I should use that one :)

Scott (scott@vorthmann.org)
2018-09-09 18:53:35

remember, it is an index according to the vZome numbering of quats

Scott (scott@vorthmann.org)
2018-09-09 18:53:51

I had started to do that normalization, but got distracted

Scott (scott@vorthmann.org)
2018-09-09 18:54:04

we need some focus and direction

Scott (scott@vorthmann.org)
2018-09-09 18:54:50

can I tackle the shape canonicalization?

jrus (me@jacobrus.com)
2018-09-09 18:54:54

@Scott it's also relative to whatever vzome considers the standard orientation

jrus (me@jacobrus.com)
2018-09-09 18:55:05

which is not the same as the 1,a,b direction I was using

Scott (scott@vorthmann.org)
2018-09-09 18:55:13

true, I think

Scott (scott@vorthmann.org)
2018-09-09 18:55:40

canonicalize should mean "how to point this orbit prototype to the vZome canonical triangle"

Scott (scott@vorthmann.org)
2018-09-09 18:55:54

so we should be able to flip that or whatever

Scott (scott@vorthmann.org)
2018-09-09 18:56:00

can we facetime?

jrus (me@jacobrus.com)
2018-09-09 18:56:04

okay. shouldn't need flipping?

jrus (me@jacobrus.com)
2018-09-09 18:56:08

sure

Scott (scott@vorthmann.org)
2018-09-09 18:56:09

not sure

jrus (me@jacobrus.com)
2018-09-09 18:56:23

yao and simon went to the park.I was going to nap but I'll stay up a while more

Scott (scott@vorthmann.org)
2018-09-09 19:13:04

battery died!

Scott (scott@vorthmann.org)
2018-09-09 19:13:06

sorry

jrus (me@jacobrus.com)
2018-09-09 19:13:13

no worries

Scott (scott@vorthmann.org)
2018-09-09 19:13:34

feel free to experiment, we just need to have some control over what version is the one we both keep working on

jrus (me@jacobrus.com)
2018-09-09 19:13:49

how does a slack call work again?

Scott (scott@vorthmann.org)
2018-09-09 19:14:03

switch to the scott channel, and click on the phone icon

jrus (me@jacobrus.com)
2018-09-09 19:14:06

not that we need it necessarily

jrus (me@jacobrus.com)
2018-09-09 19:14:15

I was just curious if it works

jrus (me@jacobrus.com)
2018-09-09 19:34:24

oh I need to sign up

Scott (scott@vorthmann.org)
2018-09-09 19:35:24

https://join.me/vzomedemo

join.me
Scott (scott@vorthmann.org)
2018-09-09 19:35:38

no,I don't think so

Scott (scott@vorthmann.org)
2018-09-09 19:35:42

that was just an invitation

Scott (scott@vorthmann.org)
2018-09-09 19:35:49

they gave me another 2-week pro trial

Scott (scott@vorthmann.org)
2018-09-09 19:35:54

hence the nicer URL

Scott (scott@vorthmann.org)
2018-09-09 19:36:18

not sure you'll be able to share your screen

jrus (me@jacobrus.com)
2018-09-09 19:36:32

@Scott 220-483-975

jrus (me@jacobrus.com)
2018-09-09 20:16:31

@Scott apparently two of my safari tabs were taking all my cpu

jrus (me@jacobrus.com)
2018-09-09 20:17:23

@Scott it's possible that was what was causing the slowdown before

Scott (scott@vorthmann.org)
2018-09-09 20:25:58

I still recommend onetab

Scott (scott@vorthmann.org)
2018-09-09 20:26:53

Lia wants to hear Simon's icosahedron 😄

Scott (scott@vorthmann.org)
2018-09-09 20:30:45

woohoo, Thai food ordered

jrus (me@jacobrus.com)
2018-09-09 20:40:21

@Scott thanks btw forfinding that [1,0,0] thing

jrus (me@jacobrus.com)
2018-09-09 20:40:35

I think I could have been stuck on it for quite a bit longer

jrus (me@jacobrus.com)
2018-09-09 20:42:56

I'm going to investigate the other got-the-wrong-rotation issues

Scott (scott@vorthmann.org)
2018-09-09 20:45:02

Np... You would have seen it soon.

jrus (me@jacobrus.com)
2018-09-09 20:49:37

@Scott okay!

jrus (me@jacobrus.com)
2018-09-09 20:49:49

the rotation thing was because we were multiplying by the conjugate of what we wanted

jrus (me@jacobrus.com)
2018-09-09 20:50:11

we had the rotation to go from standard triangle -> prototype direction, but we wanted the other way

Scott (scott@vorthmann.org)
2018-09-09 20:50:20

Good news... A sign error

jrus (me@jacobrus.com)
2018-09-09 20:50:32

we were actually properly using the conjugate in changing the vertices of the model

jrus (me@jacobrus.com)
2018-09-09 20:50:41

just not in the little 'wtf' printing code

Scott (scott@vorthmann.org)
2018-09-09 20:50:47

Cool

jrus (me@jacobrus.com)
2018-09-09 20:50:58

so we don't need rp after all :)

jrus (me@jacobrus.com)
2018-09-09 20:51:36

@Scott thanks a bunch. I think we have it (ish)

jrus (me@jacobrus.com)
2018-09-09 20:52:06

yay programming.... 80% of the time spent on typos

jrus (me@jacobrus.com)
2018-09-09 20:52:23

and broken videoconferencing

jrus (me@jacobrus.com)
2018-09-09 20:52:28

:P

Scott (scott@vorthmann.org)
2018-09-09 20:52:34

Good. Logic prevails, chaos is vanquished

Scott (scott@vorthmann.org)
2018-09-09 20:53:09

Now I just need to understand it all... And we need to write about it

jrus (me@jacobrus.com)
2018-09-09 20:53:10

now what's a good model to try to make?

jrus (me@jacobrus.com)
2018-09-09 20:56:18

@Scott I'm glad to have a 3d-rendered interesting bunch of shapes to play with 3d mouse/multitouch with

jrus (me@jacobrus.com)
2018-09-09 20:56:48

I think we can do some useful research into better rotation methods

jrus (me@jacobrus.com)
2018-09-09 20:56:56

even without building a 3d trackball

jrus (me@jacobrus.com)
2018-09-09 21:04:20

it's nice being able to experiment easily, e.g. draw all the purples testResolve = { const v0 = [[1, 1], [1, 0], [0, 0]]; // purple const vs = icosahedral_quaternions_vzome.map(q =&gt; quattransform(q, v0)) return resolveModel(vs.map(v =&gt; [[[0],[0],[0]], v])); }

jrus (me@jacobrus.com)
2018-09-09 21:15:43

@Scott okay yao sent you a video of simon saying 'icosahedron'

Scott (scott@vorthmann.org)
2018-09-09 21:21:17

yup, got it, thank you

Scott (scott@vorthmann.org)
2018-09-09 21:22:11

glad to have played my small part to empower you!

Scott (scott@vorthmann.org)
2018-09-09 21:22:57

you could use the non-vzome quaternions equally well, right?

jrus (me@jacobrus.com)
2018-09-09 21:24:41

sure

jrus (me@jacobrus.com)
2018-09-09 21:24:55

@Scott they are the same list in a different order

Scott (scott@vorthmann.org)
2018-09-09 21:25:01

ugh, my purple looks like mulberry

Scott (scott@vorthmann.org)
2018-09-09 21:25:09

yes, just checking

jrus (me@jacobrus.com)
2018-09-09 21:25:13

I'll pick you some better colors sometime

jrus (me@jacobrus.com)
2018-09-09 21:25:24

that still align with the names

Scott (scott@vorthmann.org)
2018-09-09 21:25:36

these are just hand-crafted... I'll export the vZome colors, and you can tune them for me

jrus (me@jacobrus.com)
2018-09-09 21:26:07

I know they are hand-picked. I just don't like the choices :)

jrus (me@jacobrus.com)
2018-09-09 21:26:22

I really need to make a good observable notebook color picker

Scott (scott@vorthmann.org)
2018-09-09 21:26:26

no, I mean these in the notebook are just wild-ass guessed by me

jrus (me@jacobrus.com)
2018-09-09 21:26:48

ah

jrus (me@jacobrus.com)
2018-09-09 21:26:51

either way

Scott (scott@vorthmann.org)
2018-09-09 21:26:54

and you, in the case of orange

jrus (me@jacobrus.com)
2018-09-09 21:26:58

right

jrus (me@jacobrus.com)
2018-09-09 21:27:16

we should also support any chosen color for a strut

Scott (scott@vorthmann.org)
2018-09-09 21:27:23

oh, definitely

jrus (me@jacobrus.com)
2018-09-09 21:27:24

so I can make some white struts in the blue direction etc.

Scott (scott@vorthmann.org)
2018-09-09 21:27:29

vZome does... VSON does not yet

Scott (scott@vorthmann.org)
2018-09-09 21:27:42

that is easily remedied

jrus (me@jacobrus.com)
2018-09-09 21:27:55

one thing I want to make in observable is a "color list view"

jrus (me@jacobrus.com)
2018-09-09 21:28:35

that exposes an object like {red: 'foo', blue: 'bar', ...} to other cells, but shows itself as a list of color swatches next to a color picker

Scott (scott@vorthmann.org)
2018-09-09 21:28:51

nice idea

Scott (scott@vorthmann.org)
2018-09-09 21:29:07

but aren't there a number of really nice color pickers online?

jrus (me@jacobrus.com)
2018-09-09 21:29:07

then you could drop that in, and someone could change all the colors for the orbits in their own notebook

jrus (me@jacobrus.com)
2018-09-09 21:29:13

they all suck

Scott (scott@vorthmann.org)
2018-09-09 21:29:13

oh, of course

jrus (me@jacobrus.com)
2018-09-09 21:29:50

@Scott they use the wrong color model

Scott (scott@vorthmann.org)
2018-09-09 21:29:57

yes, I remember

jrus (me@jacobrus.com)
2018-09-09 21:31:06

bleh

jrus (me@jacobrus.com)
2018-09-09 21:31:16

the harvard computer society apparently clobbered my website

Scott (scott@vorthmann.org)
2018-09-09 21:31:29

not cool

Scott (scott@vorthmann.org)
2018-09-09 21:31:47

they'll probably re-enable if you ask... have seen this happen to other academics, even professors

jrus (me@jacobrus.com)
2018-09-09 21:31:49

I was going to link you to the color picker I had been working on a few years ago (just for a few days, so not very finished)

Scott (scott@vorthmann.org)
2018-09-09 21:32:13

you may still have ssh access, even if the site is no longer hosted

jrus (me@jacobrus.com)
2018-09-09 21:32:18

yeah

jrus (me@jacobrus.com)
2018-09-09 21:32:21

but I don't remember the password

jrus (me@jacobrus.com)
2018-09-09 21:32:31

so Ineed to get my private key from an old laptop

Scott (scott@vorthmann.org)
2018-09-09 21:32:51

ah, software archeology... a favorite pastime

jrus (me@jacobrus.com)
2018-09-09 21:33:02

anyway...

jrus (me@jacobrus.com)
2018-09-09 21:33:13

that's a bummer, as that thing was still more useful than alternatives

jrus (me@jacobrus.com)
2018-09-09 21:33:18

even as a half-broken prototype

Scott (scott@vorthmann.org)
2018-09-09 21:33:20

share me a stable, and I'll merge

Scott (scott@vorthmann.org)
2018-09-09 21:33:36

nah, I'll just fork yours

jrus (me@jacobrus.com)
2018-09-09 21:33:47

I haven't changed anything https://beta.observablehq.com/d/b30f26a5f6143d40

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-09 21:33:56

need to apply a little strategy about how to factor these notebooks going forward

Scott (scott@vorthmann.org)
2018-09-09 21:33:59

thx

jrus (me@jacobrus.com)
2018-09-09 21:34:08

feel free to put your whitespace style back if you like :)

Scott (scott@vorthmann.org)
2018-09-09 21:34:26

oh, I didn't notice the change... and don't know where to set it

Scott (scott@vorthmann.org)
2018-09-09 21:34:40

a setting? or you mean the literal JSON?

jrus (me@jacobrus.com)
2018-09-09 21:34:40

oh, I mean, I removed all sorts of whitespace from your code

Scott (scott@vorthmann.org)
2018-09-09 21:34:52

no problem... I know I'm weird in that regard

Scott (scott@vorthmann.org)
2018-09-09 21:35:12

never understood... we need whitespace to read language, why shouldn't it help when reading code?

Scott (scott@vorthmann.org)
2018-09-09 21:35:24

I think everyone is just brainwashed

jrus (me@jacobrus.com)
2018-09-09 21:35:30

I just reflexively put things in a moderately standard-ish form (though I have never been good about camelCase names, even though everyone does it in JS)

Scott (scott@vorthmann.org)
2018-09-09 21:35:34

but nobody has ever agreed with me

Scott (scott@vorthmann.org)
2018-09-09 21:35:55

given your emphasis on perception, you were my last hope

jrus (me@jacobrus.com)
2018-09-09 21:36:23

that's what syntax highlighting is for

Scott (scott@vorthmann.org)
2018-09-09 21:36:43

everyone else's code always looks like those old illuminated manuscripts with out ANY word breaks

jrus (me@jacobrus.com)
2018-09-09 21:36:45

if it were up to me punctuation would be a bit deemphasized

jrus (me@jacobrus.com)
2018-09-09 21:37:22

i.e. somewhat grayed out

Scott (scott@vorthmann.org)
2018-09-09 21:37:22

that's another thing... I hate reading black code, don't know how anyone does it

Scott (scott@vorthmann.org)
2018-09-09 21:38:04

and I like identifiers colored (by semantic category)... but so many tools highlight keywords, the noise in the signal

Scott (scott@vorthmann.org)
2018-09-09 21:38:24

and, as you say, punctuation

Scott (scott@vorthmann.org)
2018-09-09 21:38:56

ok, </rant>

jrus (me@jacobrus.com)
2018-09-09 21:39:08

anyway, if you want to change the space to whatever you prefer, go ahead

jrus (me@jacobrus.com)
2018-09-09 21:39:16

sorry if I clobbered any of your style

Scott (scott@vorthmann.org)
2018-09-09 21:39:21

I may... not a problem

Scott (scott@vorthmann.org)
2018-09-09 21:39:39

probably when I start trying to read some of your code, I'll have to

Scott (scott@vorthmann.org)
2018-09-09 21:40:39

hey, is there any mechanism to give a notebook a TOC?

Scott (scott@vorthmann.org)
2018-09-09 21:40:53

the usual idea, based on heading sizes in markdown/html?

Scott (scott@vorthmann.org)
2018-09-09 21:41:14

I guess one can always hand-build it easily enough

Scott (scott@vorthmann.org)
2018-09-09 21:43:18

Is it OK with you if my fork of your fork of my notebook is the one we take forward? I'll probably split out the non-canonical stuff (vZome specific) as a separate notebook

Scott (scott@vorthmann.org)
2018-09-09 21:44:25

and the canonical stuff we can publish as "Observable vZome", or something in that vein

Scott (scott@vorthmann.org)
2018-09-09 21:49:39

my fork: https://beta.observablehq.com/d/25bd296a94f5834d

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-09 22:02:27

@Scott sure

jrus (me@jacobrus.com)
2018-09-09 22:02:56

@Scott you sure you shared it?

Scott (scott@vorthmann.org)
2018-09-09 22:03:21

was having some "red" trouble with sharing... checking

jrus (me@jacobrus.com)
2018-09-09 22:03:34

ah, you might need to reload your page

Scott (scott@vorthmann.org)
2018-09-09 22:03:38

https://beta.observablehq.com/d/25bd296a94f5834d

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-09 22:03:49

observable storesyour changes locally in the browser so you shouldn't lose data from reloads

Scott (scott@vorthmann.org)
2018-09-09 22:04:10

ah, now I see the # links

Scott (scott@vorthmann.org)
2018-09-09 22:04:12

yes

jrus (me@jacobrus.com)
2018-09-09 22:04:48

any changes I should look at?

Scott (scott@vorthmann.org)
2018-09-09 22:05:01

no, just a better purple 😉

Scott (scott@vorthmann.org)
2018-09-09 22:05:12

I'm factoring out all the vZome-specific into a fork

Scott (scott@vorthmann.org)
2018-09-09 22:06:20

and new title and lead paragraph

jrus (me@jacobrus.com)
2018-09-09 22:06:27

it might even be possible to generate some of the geometry from code. especially e.g. lifelike balls and the connectors on the ends of struts

Scott (scott@vorthmann.org)
2018-09-09 22:07:17

sure, we want to be agnostic to how the shapes are produced... we can have a "super resolve" that creates shapes on the fly

jrus (me@jacobrus.com)
2018-09-09 22:07:23

not worth worrying about any time soon

Scott (scott@vorthmann.org)
2018-09-09 22:07:37

we do want a todo-list somewhere... not a notebook

jrus (me@jacobrus.com)
2018-09-09 22:07:42

I just think it might be nice to have a self-contained thing that doesn't depend on gists at some point

jrus (me@jacobrus.com)
2018-09-09 22:08:23

if you want to draw struts which go all the way to the center of the ball what would you do? just add 3–5 extra polygons at each end?

jrus (me@jacobrus.com)
2018-09-09 22:08:42

e.g. if you want to show how the lengths scale like the golden ratio

Scott (scott@vorthmann.org)
2018-09-09 22:08:53

agree on self-contained

Scott (scott@vorthmann.org)
2018-09-09 22:09:19

you mean a ball-less rendering?

jrus (me@jacobrus.com)
2018-09-09 22:09:25

right

jrus (me@jacobrus.com)
2018-09-09 22:09:34

not for everything, just for showing struts

Scott (scott@vorthmann.org)
2018-09-09 22:09:53

sure, just a nice tapered pyramid... sharp enough so RYB don't intersect (i.e. use the ball vertices)

jrus (me@jacobrus.com)
2018-09-09 22:10:38

oh man. project management?

Scott (scott@vorthmann.org)
2018-09-09 22:10:39

David and I have used Trello for what little planning we do... mostly just a clearinghouse for bugs and ideas and todos

jrus (me@jacobrus.com)
2018-09-09 22:10:45

:P

Scott (scott@vorthmann.org)
2018-09-09 22:10:47

don't get spooked

Scott (scott@vorthmann.org)
2018-09-09 22:10:51

we have lots of ideas

Scott (scott@vorthmann.org)
2018-09-09 22:10:58

think of it as just a collaborative list

jrus (me@jacobrus.com)
2018-09-09 22:11:02

P.S. I can't see that link

Scott (scott@vorthmann.org)
2018-09-09 22:11:20

yeah, probably not without creating an account... lemme see if I can open it up somehow

jrus (me@jacobrus.com)
2018-09-09 22:11:42

oh I'll make an account

Scott (scott@vorthmann.org)
2018-09-09 22:11:48
Scott (scott@vorthmann.org)
2018-09-09 22:11:50

inviting you

jrus (me@jacobrus.com)
2018-09-09 22:11:54

no

jrus (me@jacobrus.com)
2018-09-09 22:11:58

jacob.rus@gmail

Scott (scott@vorthmann.org)
2018-09-09 22:12:00

ok

jrus (me@jacobrus.com)
2018-09-09 22:12:09
jrus (me@jacobrus.com)
2018-09-09 22:12:15

or jacobolus@gmail

jrus (me@jacobrus.com)
2018-09-09 22:12:18

or various others

jrus (me@jacobrus.com)
2018-09-09 22:12:26

probably not jrus@hcs.harvard though

Scott (scott@vorthmann.org)
2018-09-09 22:12:31

did you create already? Trello acted like it knew you

jrus (me@jacobrus.com)
2018-09-09 22:12:39

I'm going to make one now

jrus (me@jacobrus.com)
2018-09-09 22:12:41

I might have

jrus (me@jacobrus.com)
2018-09-09 22:12:47

I have used trello before

Scott (scott@vorthmann.org)
2018-09-09 22:14:06

check your email

jrus (me@jacobrus.com)
2018-09-09 22:14:42

well I signed up for a trello, apparently as jrus2

jrus (me@jacobrus.com)
2018-09-09 22:15:02

I still can't seethe vzome one

Scott (scott@vorthmann.org)
2018-09-09 22:17:48

try that

jrus (me@jacobrus.com)
2018-09-09 22:17:59

you need to add me somewhere

Scott (scott@vorthmann.org)
2018-09-09 22:18:12

I'll try as jrus2

jrus (me@jacobrus.com)
2018-09-09 22:18:14

Board not found.

This board may be private. If someone gave you this link, they may need to invite you to one of their boards or teams.

jrus (me@jacobrus.com)
2018-09-09 22:18:32

you used my jacob.rus@gmail email before?

jrus (me@jacobrus.com)
2018-09-09 22:18:35

I can try that one

jrus (me@jacobrus.com)
2018-09-09 22:18:45

I made a new acct using the jacobolus@gmail email

Scott (scott@vorthmann.org)
2018-09-09 22:18:57

ok try now

jrus (me@jacobrus.com)
2018-09-09 22:19:05

now works

Scott (scott@vorthmann.org)
2018-09-09 22:19:08

cool

Scott (scott@vorthmann.org)
2018-09-09 22:19:26

there is a todo mechanism in Slack, but I think it is only per user

jrus (me@jacobrus.com)
2018-09-09 22:19:53

you can delete the other user

jrus (me@jacobrus.com)
2018-09-09 22:20:35

@Scott did you add any 'cards'?

Scott (scott@vorthmann.org)
2018-09-09 22:20:35

did so

Scott (scott@vorthmann.org)
2018-09-09 22:20:42

no, just two lists

jrus (me@jacobrus.com)
2018-09-09 22:20:44

aha

jrus (me@jacobrus.com)
2018-09-09 22:21:35

@Scott so one thing I would like to do is make a version of the renderer which (a) has a transparent or white background, (b) can be stuck next to a block of text

Scott (scott@vorthmann.org)
2018-09-09 22:21:39

I kinda like the idea of getting a bit more refined before we publish the notebook... more prose at least, but also some features

Scott (scott@vorthmann.org)
2018-09-09 22:21:48

ok, add 'em

Scott (scott@vorthmann.org)
2018-09-09 22:22:09

add a list, if you like

Scott (scott@vorthmann.org)
2018-09-09 22:22:44

is there a way to put a canvas element in Markdown? guess it can always be HTML

jrus (me@jacobrus.com)
2018-09-09 22:22:55

yes, you just put an html canvas there

Scott (scott@vorthmann.org)
2018-09-09 22:23:10

probably the only current problem is that it always uses "width"

jrus (me@jacobrus.com)
2018-09-09 22:23:17

doesn't have to though

Scott (scott@vorthmann.org)
2018-09-09 22:23:23

let's try adding a param

Scott (scott@vorthmann.org)
2018-09-09 22:24:23

sure, check it out

Scott (scott@vorthmann.org)
2018-09-09 22:24:25

reshared

jrus (me@jacobrus.com)
2018-09-09 22:35:16

@Scott should I keep adding cards?

Scott (scott@vorthmann.org)
2018-09-09 22:35:26

sure, go to town

jrus (me@jacobrus.com)
2018-09-09 22:35:39

anything I'm forgetting?

Scott (scott@vorthmann.org)
2018-09-09 22:35:40

wow!

Scott (scott@vorthmann.org)
2018-09-09 22:35:44

looking

Scott (scott@vorthmann.org)
2018-09-09 22:37:28

very good... I'll add pithy summaries, and move the description inside

jrus (me@jacobrus.com)
2018-09-09 22:37:36

why?

jrus (me@jacobrus.com)
2018-09-09 22:37:39

these take too much space?

Scott (scott@vorthmann.org)
2018-09-09 22:37:42

I think I have a few others

Scott (scott@vorthmann.org)
2018-09-09 22:37:50

not space... ability to grok all at once

jrus (me@jacobrus.com)
2018-09-09 22:37:58

I haven't used trello in at least 5 years

jrus (me@jacobrus.com)
2018-09-09 22:38:03

and was never a heavy user

jrus (me@jacobrus.com)
2018-09-09 22:38:11

so I'm not sure what a good approach is

Scott (scott@vorthmann.org)
2018-09-09 22:38:21

even David and I don't use it much... we could also switch to Google Notes, which I use heavily at work and home

jrus (me@jacobrus.com)
2018-09-09 22:38:34

feel free to rewrite/delete/merge/... my cards

Scott (scott@vorthmann.org)
2018-09-09 22:38:41

thank you

Scott (scott@vorthmann.org)
2018-09-09 22:39:11

do use anything other than your own memory?

Scott (scott@vorthmann.org)
2018-09-09 22:39:43

little scraps of paper with graphite scribbles? 😉

jrus (me@jacobrus.com)
2018-09-09 22:39:46

sometimes

Scott (scott@vorthmann.org)
2018-09-09 22:40:13

my head is not so good... I lose track, drop priorities

jrus (me@jacobrus.com)
2018-09-09 22:41:04

yeah, my projects stall for 5 years, and then I'm like "what was I trying to do with this one again?"

Scott (scott@vorthmann.org)
2018-09-09 22:42:15

hmmm... virtual bobs is an interesting idea... I usually just want to use a 2x strut length or whatever

Scott (scott@vorthmann.org)
2018-09-09 22:42:41

making a model physically realizable (validation) is something I've always wanted for vZome

jrus (me@jacobrus.com)
2018-09-09 22:42:41

I would sometimes want to demonstrate what can be done with physical models

Scott (scott@vorthmann.org)
2018-09-09 22:42:46

yes

Scott (scott@vorthmann.org)
2018-09-09 22:43:30

I think it is much easier to experiment and innovate in Observable and Javascript... we may easily reach things vZome has never been able to.

Scott (scott@vorthmann.org)
2018-09-09 22:43:36

Already have, in a sense

Scott (scott@vorthmann.org)
2018-09-09 22:43:49

open extensibility

Scott (scott@vorthmann.org)
2018-09-09 22:46:26

reshared... showing off my mad html skilz

Scott (scott@vorthmann.org)
2018-09-09 22:51:40

also, please add your thoughts to https://trello.com/c/WQD9Wefg

jrus (me@jacobrus.com)
2018-09-09 22:53:07

personally I like passing objects instead of this chain API style, but it seems to be popular in javascript, so I won't object

jrus (me@jacobrus.com)
2018-09-09 22:53:49

maybe look at how D3 or similar do it

Scott (scott@vorthmann.org)
2018-09-09 22:54:31

yes, I was impressed with D3

Scott (scott@vorthmann.org)
2018-09-09 22:55:17

we have a lot of potential parameters, or config models (like camera, lighting, background... )

Scott (scott@vorthmann.org)
2018-09-09 22:57:18

we could almost just expose the 3js classes... one could even add a mesh, put their own labels on a model, etc.

Scott (scott@vorthmann.org)
2018-09-09 22:57:43

better to not try to encapsulate too much

Scott (scott@vorthmann.org)
2018-09-09 22:58:33

the main value we are adding is to generate a group of meshes with orbit-based geometry

jrus (me@jacobrus.com)
2018-09-09 22:58:40

ideally someone can get relatively raw access to 3js

Scott (scott@vorthmann.org)
2018-09-09 22:58:45

yes

jrus (me@jacobrus.com)
2018-09-09 22:58:53

without needing to rewrite too much code

Scott (scott@vorthmann.org)
2018-09-09 22:59:04

what is now the vZomeRenderer could really just be a convenience

jrus (me@jacobrus.com)
2018-09-09 22:59:57

I think start by just hacking together whatever you need for immediate goals

Scott (scott@vorthmann.org)
2018-09-09 23:00:04

yes

jrus (me@jacobrus.com)
2018-09-09 23:00:16

can worry about what a good API is once there are some use cases

Scott (scott@vorthmann.org)
2018-09-09 23:00:24

did you see my new reshare?

jrus (me@jacobrus.com)
2018-09-09 23:00:34

yep

Scott (scott@vorthmann.org)
2018-09-09 23:01:12

just reshared again with a white background

jrus (me@jacobrus.com)
2018-09-09 23:02:37

I wonder if it takes extra gpu to render a big empty white canvas

jrus (me@jacobrus.com)
2018-09-09 23:02:48

if the model is only in one area

Scott (scott@vorthmann.org)
2018-09-09 23:03:20

only fragment shader will be engaged, I guess

jrus (me@jacobrus.com)
2018-09-09 23:03:34

@Scott I would actually like to render models in big views behind my text, and allow the reader to zoom in with the text getting overlapped if they desire

Scott (scott@vorthmann.org)
2018-09-09 23:03:36

probably nearly free

Scott (scott@vorthmann.org)
2018-09-09 23:03:46

oh, that would be nice

jrus (me@jacobrus.com)
2018-09-09 23:04:01

needs the ability to make the camera center not near the image center

Scott (scott@vorthmann.org)
2018-09-09 23:04:06

that is an HTML canvas question

Scott (scott@vorthmann.org)
2018-09-09 23:06:31

the camera control is easy enough I believe

Scott (scott@vorthmann.org)
2018-09-09 23:06:49

the text overlay is a question for any canvas, not just 3js

jrus (me@jacobrus.com)
2018-09-09 23:06:56

oh that's not hard

jrus (me@jacobrus.com)
2018-09-09 23:07:17

it's more a question of getting the details of mouse control etc. right

Scott (scott@vorthmann.org)
2018-09-09 23:07:21

yes

jrus (me@jacobrus.com)
2018-09-09 23:07:33

I have no doubt I can put a webgl view behind a text div

Scott (scott@vorthmann.org)
2018-09-09 23:07:37

cool

Scott (scott@vorthmann.org)
2018-09-09 23:10:27

I like all your Trello cards. Gonna be fun

jrus (me@jacobrus.com)
2018-09-09 23:29:24

@Scott I think you actually forked a slightly old version of my notebook

jrus (me@jacobrus.com)
2018-09-09 23:29:36

anyway, not going to worry about this now

jrus (me@jacobrus.com)
2018-09-09 23:29:46

time to read books with simon / sleep / ...

Scott (scott@vorthmann.org)
2018-09-09 23:31:46

gnight

Scott (scott@vorthmann.org)
2018-09-09 23:31:59

probably why Spruce is not so nice?

jrus (me@jacobrus.com)
2018-09-09 23:38:56

@Scott oh, I think I broke the vson models, by changing the prototypes / strut geometry

jrus (me@jacobrus.com)
2018-09-09 23:39:22

need to add a quaternion multiplication & scaling to get vson to render

Scott (scott@vorthmann.org)
2018-09-09 23:46:46

oh right... VSON won't work until I do my bit

Scott (scott@vorthmann.org)
2018-09-09 23:46:54

don't worry, my problem

Scott (scott@vorthmann.org)
2018-09-09 23:48:02

I'm psyched... really tempted to call in sick

Scott (scott@vorthmann.org)
2018-09-09 23:48:32

now good night for real

jrus (me@jacobrus.com)
2018-09-10 11:38:19

@Scott is the right place to look for the colors defaultPrefs.properties?

```# These defaults only operate for vzome-core when not overridden by vzome-desktop.

See the constructor for com.vzome.core.editor.Application, and how it calls loadDefaults().

color.red = 175,0,0 color.yellow = 240,160,0 color.blue = 0,118,149 color.green = 0,141,54 color.orange = 220,76,0 color.purple = 108,0,198 color.black = 30,30,30 color.white = 225,225,225 color.olive = 100,113,0 color.lavender = 175,135,255 color.maroon = 117,0,50 color.rose = 255,51,143 color.navy = 0,0,153 color.brown = 107,53,26 color.apple = 116,195,0 color.sand = 154,117,74 color.turquoise = 18,205,148 color.coral = 255,126,106 color.sulfur = 230,245,62 color.cinnamon = 136,37,0 color.spruce = 18,73,48

color.magenta = 255,41,183

color.snubPentagon = 187,57,48 color.snubTriangle = 87,188,48 color.snubDiagonal = 228,225,199

color.slate = 108, 126, 142 color.mauve = 137, 104, 112 color.ivory = 228,225,199

color.panels = 225,225,225

color.background = 175,200,220

color.highlight = 195,195,195 color.highlight.mac = 153,255,0

color.light.directional.1 = 235, 235, 228 color.light.directional.2 = 228, 228, 235 color.light.directional.3 = 30, 30, 30

color.light.ambient = 41, 41, 41```

Scott (scott@vorthmann.org)
2018-09-10 11:39:21

Yes

Scott (scott@vorthmann.org)
2018-09-10 11:40:04

Did you grep, or read code to track it down?

Scott (scott@vorthmann.org)
2018-09-10 11:40:19

Well done either way

jrus (me@jacobrus.com)
2018-09-10 11:43:16

oh, of course I searched

jrus (me@jacobrus.com)
2018-09-10 11:43:23

(for one of the color names)

jrus (me@jacobrus.com)
2018-09-10 11:45:32

oh I see, it can be overridden by user prefs

Scott (scott@vorthmann.org)
2018-09-10 11:47:22

Yes

jrus (me@jacobrus.com)
2018-09-10 12:01:31

@Scott so slate, mauve, ivory are for a different symmetry system or so?

Scott (scott@vorthmann.org)
2018-09-10 12:05:51

I think for the snub dodec field... Not used, to within epsilon

jrus (me@jacobrus.com)
2018-09-10 12:09:10

@Scott btw, I think you did a pretty good job picking the zometool strut colors

Scott (scott@vorthmann.org)
2018-09-10 12:09:16

It was a one-off in 2011

jrus (me@jacobrus.com)
2018-09-10 12:09:17

i.e. red/yellow/blue/green

jrus (me@jacobrus.com)
2018-09-10 12:09:38

I guess you were trying to match the physical struts?

Scott (scott@vorthmann.org)
2018-09-10 12:09:49

They were dictated to me by Paul at some point 😄

jrus (me@jacobrus.com)
2018-09-10 12:10:06

I think the blue one is slightly greener than the physical zome struts

jrus (me@jacobrus.com)
2018-09-10 12:10:14

hard to say

Scott (scott@vorthmann.org)
2018-09-10 12:10:40

The old struts were greener on my set

jrus (me@jacobrus.com)
2018-09-10 12:10:44

if I were choosing for zometool I would also use a slightly bluer green than the one they chose :)

jrus (me@jacobrus.com)
2018-09-10 12:10:55

there's also some yellowing over time

jrus (me@jacobrus.com)
2018-09-10 12:10:57

of plastic

Scott (scott@vorthmann.org)
2018-09-10 12:11:01

Yes

jrus (me@jacobrus.com)
2018-09-10 12:11:09

so if you look at blue struts from 20 years ago they will look greener

jrus (me@jacobrus.com)
2018-09-10 12:11:18

at least, if they got sunlight instead of sitting in a box

Scott (scott@vorthmann.org)
2018-09-10 12:11:36

Mine were a bit green when I bought them... Around 1999

jrus (me@jacobrus.com)
2018-09-10 12:12:09

the original green strut color was also yuckier I believe

Scott (scott@vorthmann.org)
2018-09-10 12:13:08

We should check what their current spec is

jrus (me@jacobrus.com)
2018-09-10 12:13:08

or maybe not. let me see if I can find some very old ones

jrus (me@jacobrus.com)
2018-09-10 12:14:00

I think I'm misremembering. 'yuckier' is not the right description

jrus (me@jacobrus.com)
2018-09-10 12:14:06

anyway...

Scott (scott@vorthmann.org)
2018-09-10 12:14:57

Maybe Paul would enjoy a demo when he's back home recuperating

jrus (me@jacobrus.com)
2018-09-10 12:15:15

demo of the web thing?

jrus (me@jacobrus.com)
2018-09-10 12:15:15

sure

Scott (scott@vorthmann.org)
2018-09-10 12:15:23

Though Carlos would get a lot more jazzed

Scott (scott@vorthmann.org)
2018-09-10 12:16:25

You meet Paul in Waterloo, right?

jrus (me@jacobrus.com)
2018-09-10 12:16:48

yes

jrus (me@jacobrus.com)
2018-09-10 12:19:59

you should switch white to something that isn’t 255,255,255 I think

jrus (me@jacobrus.com)
2018-09-10 12:20:13

that doesn't give you room for highlights, etc.

Scott (scott@vorthmann.org)
2018-09-10 12:20:43

For highlights I use glow anyway

Scott (scott@vorthmann.org)
2018-09-10 12:21:16

And I dim the ambient when highlighting

jrus (me@jacobrus.com)
2018-09-10 12:25:30

even so

jrus (me@jacobrus.com)
2018-09-10 12:25:46

being so close to the top end means you lose some contrast in your shading

Scott (scott@vorthmann.org)
2018-09-10 12:33:10

I'm open. I did try less saturation at some point, but I wasn't happy with it. I may have overshot

Scott (scott@vorthmann.org)
2018-09-10 12:35:18

It feels like the shader still manages bright specular reflections, but I have seen washout, too

Scott (scott@vorthmann.org)
2018-09-10 12:35:58

Mostly I get into trouble with too many bright lights, I think

Scott (scott@vorthmann.org)
2018-09-10 12:43:02

I'm willing to try whatever you recommend

jrus (me@jacobrus.com)
2018-09-10 13:14:17

@Scott Here's some playing with the colors. On the left, originals on top, new ones on bottom. On the right, grouped-ish

Scott (scott@vorthmann.org)
2018-09-10 13:17:40

Cool. Will take a look

jrus (me@jacobrus.com)
2018-09-10 13:18:02

still can use some work

jrus (me@jacobrus.com)
2018-09-10 13:18:22

but I moved some of the very similar ones apart, and toned downthe extreme radioactive ones

Scott (scott@vorthmann.org)
2018-09-10 13:20:17

Seems like there are too many still... I cannot name them all. Probably more in the preferences file than are actually used

jrus (me@jacobrus.com)
2018-09-10 13:20:35

that's okay. we can still push those apart

jrus (me@jacobrus.com)
2018-09-10 13:20:43

this is including snubDiagonal, etc.

Scott (scott@vorthmann.org)
2018-09-10 13:20:50

I like that orange and red are more distinguished

Scott (scott@vorthmann.org)
2018-09-10 13:20:56

Right

jrus (me@jacobrus.com)
2018-09-10 13:21:01

on the leftthey are in order from the prefs file

Scott (scott@vorthmann.org)
2018-09-10 13:21:16

Ok I'll check tonight

Scott (scott@vorthmann.org)
2018-09-10 13:22:25

Looks like I was wrong about the snubs... Those are the three I could not name

Scott (scott@vorthmann.org)
2018-09-10 13:24:14

You can ignore anything after spruce... Anything else could get assigned brand new, distinct colors, and nobody would notice

jrus (me@jacobrus.com)
2018-09-10 13:24:54

okay, I'm going to at least change magenta :)

jrus (me@jacobrus.com)
2018-09-10 13:25:14

we can totally change the snub ones if you want, doesn't matter to me

Scott (scott@vorthmann.org)
2018-09-10 13:25:17

I don't know where it is used if anywhere... Ignore it

Scott (scott@vorthmann.org)
2018-09-10 13:26:33

I think it was only there for defining cut lines for stickers, where the aesthetic is not the requirement... They match on the exact RGB

jrus (me@jacobrus.com)
2018-09-10 13:40:12

@Scott so for white I'm doing 238,241,247. worth testing to see if that looks dull

Scott (scott@vorthmann.org)
2018-09-10 13:40:37

Ok

jrus (me@jacobrus.com)
2018-09-10 13:41:03

I don't know if you want a slightly bluish white

jrus (me@jacobrus.com)
2018-09-10 13:41:11

I just get tired of completely pure neutrals

Scott (scott@vorthmann.org)
2018-09-10 13:42:24

Don't really care... The physical balls are wildly variable. Looks like a rainbow if you get a bunch in a box, from different purchases

jrus (me@jacobrus.com)
2018-09-10 13:42:44

sure. it's just down to what you think looks good

jrus (me@jacobrus.com)
2018-09-10 13:42:56

since the white color is used in pretty much every model

Scott (scott@vorthmann.org)
2018-09-10 13:44:45

I tend to a warmer White point on displays, but let me look at it. Bluer will be nice for a default sky blue background

jrus (me@jacobrus.com)
2018-09-10 14:05:07

@Scott I should also add the zometool half-green color ("teal"?)

jrus (me@jacobrus.com)
2018-09-10 14:06:10

obviously for many purposes those can just be colored green

Scott (scott@vorthmann.org)
2018-09-10 14:06:12

I never use it in vZome... All green lines are green regardless of what weird length they might be

jrus (me@jacobrus.com)
2018-09-10 14:33:05

I really need a tool where I can easily plot the hue/lightness of a set of colors as a scatterplot

jrus (me@jacobrus.com)
2018-09-10 14:38:47

don't want to build it today though

jrus (me@jacobrus.com)
2018-09-10 14:41:08

@Scott more tweaks to these colors

jrus (me@jacobrus.com)
2018-09-10 14:41:35

over to the right, old on top, new on bottom

jrus (me@jacobrus.com)
2018-09-10 14:49:54

okay, going out with simon

Scott (scott@vorthmann.org)
2018-09-10 14:50:13

Later

jrus (me@jacobrus.com)
2018-09-10 14:52:04

hopefully maroon, red, orange, cinnamon, and brown are all now more easily distinguishable

jrus (me@jacobrus.com)
2018-09-10 15:00:04

I'm not totally happy with 'cinammon'

jrus (me@jacobrus.com)
2018-09-10 15:00:18

that is, the color I picked might not really match the name

jrus (me@jacobrus.com)
2018-09-10 15:10:47

simon didn't want to go out... he wantedto keep playing with toys

jrus (me@jacobrus.com)
2018-09-10 15:11:20

@Scott sulfur, white, and ivory are the only colors lighter than the background. do you want sulfur way up there?

Scott (scott@vorthmann.org)
2018-09-10 15:39:49

Background can get lighter. You want sulfur dingier? Sure. More important to be distinct from yellow.

jrus (me@jacobrus.com)
2018-09-10 15:40:17

I still have coral and rose too close together for my taste

Scott (scott@vorthmann.org)
2018-09-10 15:40:55

Are you removing lightness from my set of variables for distinguishing orbits?

Scott (scott@vorthmann.org)
2018-09-10 15:41:32

They are not at all cost for me. It is Rose not pink for a reason

jrus (me@jacobrus.com)
2018-09-10 15:41:34

lighter than the background is okay if you want

Scott (scott@vorthmann.org)
2018-09-10 15:41:43

Not close I mean

jrus (me@jacobrus.com)
2018-09-10 15:42:02

oh, yeah, ideally shouldn't have colors too close to the background. I can make sulfur a bit lighter again

jrus (me@jacobrus.com)
2018-09-10 15:42:29

I thinkyou don't want it too light

Scott (scott@vorthmann.org)
2018-09-10 15:42:36

Background is really not under our control

jrus (me@jacobrus.com)
2018-09-10 15:42:43

what do you mean?

jrus (me@jacobrus.com)
2018-09-10 15:42:56

I was planning to leave the background alone

Scott (scott@vorthmann.org)
2018-09-10 15:43:45

There is a user preference

Scott (scott@vorthmann.org)
2018-09-10 15:44:10

For all colors of course, but that one in particular they care about

jrus (me@jacobrus.com)
2018-09-10 15:44:17

your "rose" color looked like "hot pink" or "fuschia" to me. I was moving it toward a pinker kind of rose color

jrus (me@jacobrus.com)
2018-09-10 15:44:48

the color name "rose" doesn't have a super tight definition, since roses come in a wide variety of colors

Scott (scott@vorthmann.org)
2018-09-10 15:45:07

And in observable, we can expect notebook authors to change it

jrus (me@jacobrus.com)
2018-09-10 15:45:36

yes, this is one reason I wanted to have lighter black, darker sulfur/white/ivory

jrus (me@jacobrus.com)
2018-09-10 15:45:48

so if someone uses pure white or pure black background there is still contrast

jrus (me@jacobrus.com)
2018-09-10 15:45:59

we can keep colors away from vzome-blue though

jrus (me@jacobrus.com)
2018-09-10 15:46:08

i.e. the vzome bg

jrus (me@jacobrus.com)
2018-09-10 15:46:38

@Scott if there are some important constraints on the colors based on their meaning, I can try to respect those

jrus (me@jacobrus.com)
2018-09-10 15:46:59

my approach so far has been to try to make nearby colors as distinguishable as possible without fundamentally changing them

Scott (scott@vorthmann.org)
2018-09-10 15:47:01

I wouldn't worry much... Though I have avoided the missing powder blue for years 😄

Scott (scott@vorthmann.org)
2018-09-10 15:47:49

Sorry can't keep up with your keyboard... Swipe on my phone

jrus (me@jacobrus.com)
2018-09-10 15:48:01

so I am e.g. making blue darker, green lighter brown lighter, maroon purpler,

jrus (me@jacobrus.com)
2018-09-10 15:48:59

turquoise darker, apple yellower, olive redder

Scott (scott@vorthmann.org)
2018-09-10 15:49:38

Ok, I'll review. Now back to work sorry ☹️

jrus (me@jacobrus.com)
2018-09-10 15:49:42

the goal is for (a) if you see a strut by itself you can guess what it is, and (b) if you see two struts on top of each other they don't blend together

jrus (me@jacobrus.com)
2018-09-10 15:54:24

no worries

jrus (me@jacobrus.com)
2018-09-10 16:00:27

more tweaks

jrus (me@jacobrus.com)
2018-09-10 16:01:51

I didn't touch mauve yet

Scott (scott@vorthmann.org)
2018-09-10 17:53:48

woo, grown-up keyboard

Scott (scott@vorthmann.org)
2018-09-10 17:55:17

on the right, are the chip placements mathematical in the middle?

Scott (scott@vorthmann.org)
2018-09-10 17:57:51

generally, this is an improvement. I think Zome blue has gotten too dark, however... too close to navy.

Scott (scott@vorthmann.org)
2018-09-10 18:00:06

cinnamon has lost its character... a little darker... halfway to its old level?

Scott (scott@vorthmann.org)
2018-09-10 18:00:41

I like coral with a little more orange... distance from rose

Scott (scott@vorthmann.org)
2018-09-10 18:01:21

please discard everything after spruce... it is a distraction and confusion

Scott (scott@vorthmann.org)
2018-09-10 19:34:46

@jrus I refactored my notebook, splitting it. Published https://beta.observablehq.com/@vorth/wip-importing-vzome-models

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-10 19:34:54

and reshared https://beta.observablehq.com/d/25bd296a94f5834d

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-10 19:55:08

@jrus I have now hit "publish" by accident twice.

Scott (scott@vorthmann.org)
2018-09-10 19:55:17

forked and deleted, now shared again as https://beta.observablehq.com/d/03d72a1e3a89df69

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-10 19:55:57

@Scott if you publish it that's also okay

Scott (scott@vorthmann.org)
2018-09-10 19:56:28

I suppose so, since the event stream is so full of garbage

jrus (me@jacobrus.com)
2018-09-10 19:56:44

@Scott you can always still fork and publish again :)

Scott (scott@vorthmann.org)
2018-09-10 19:56:48

when they allow unlisted publish, presumably everyone will start paying more attention

Scott (scott@vorthmann.org)
2018-09-10 19:56:58

with a different slug, though

jrus (me@jacobrus.com)
2018-09-10 19:57:05

@Scott the issue with cinnamon was that it was very similar to red and brown and maroon

Scott (scott@vorthmann.org)
2018-09-10 19:57:11

well, we'll probably want a different slug anyway

Scott (scott@vorthmann.org)
2018-09-10 19:57:25

yes, kinda crowded in there

Scott (scott@vorthmann.org)
2018-09-10 19:57:35

but I think you drifted close to orange

Scott (scott@vorthmann.org)
2018-09-10 19:57:44

can we make brown less orange?

jrus (me@jacobrus.com)
2018-09-10 19:57:56

you want brown to be greener?

Scott (scott@vorthmann.org)
2018-09-10 19:58:07

hmmm... will look like poo

jrus (me@jacobrus.com)
2018-09-10 19:58:13

the generic color "brown" is literally just dark orange

Scott (scott@vorthmann.org)
2018-09-10 19:58:19

yes I know

jrus (me@jacobrus.com)
2018-09-10 19:58:26

but we can certainly modify it however you like

jrus (me@jacobrus.com)
2018-09-10 19:58:35

I tried to spread out the lightnesses of colors of nearby hues

Scott (scott@vorthmann.org)
2018-09-10 19:58:36

let's stick to cinnamon, and just fiddle

Scott (scott@vorthmann.org)
2018-09-10 19:59:44

it really doesn't matter very much... I'm sure nobody is too attached to it

jrus (me@jacobrus.com)
2018-09-10 20:00:21

I might have fiddled a bit more since yousaw. but I have maroon L* = 29, brown L* = 36, red L* = 40, Cinnamon L* = 51, Orange L** = 59

jrus (me@jacobrus.com)
2018-09-10 20:00:31

can probably safely make cinnamon a bit darker

Scott (scott@vorthmann.org)
2018-09-10 20:00:41

just a tad, I'll be happy

jrus (me@jacobrus.com)
2018-09-10 20:01:10

you wanted it more red as well?

Scott (scott@vorthmann.org)
2018-09-10 20:01:56

no, I don't think so

Scott (scott@vorthmann.org)
2018-09-10 20:02:23

brown is really an odd duck in icosahedral, so I actually care less about it

Scott (scott@vorthmann.org)
2018-09-10 20:02:46

it is a carry-over from octahedral, where there is no cinnamon to conflict

Scott (scott@vorthmann.org)
2018-09-10 20:03:06

any thoughts on my refactoring?

Scott (scott@vorthmann.org)
2018-09-10 20:03:40

I also extracted createModelGroup, the core value... leaving vZomeRenderer as 99% pure 3js

Scott (scott@vorthmann.org)
2018-09-10 20:05:04

off to pick up Lia

jrus (me@jacobrus.com)
2018-09-10 20:05:44

oh I didn't look at your notebook yet

Scott (scott@vorthmann.org)
2018-09-10 20:05:44

back to tiny bandwidth swipey keyboard, or none at all

jrus (me@jacobrus.com)
2018-09-10 20:05:58

what direction did you want to move cinnamon then? just darker?

jrus (me@jacobrus.com)
2018-09-10 20:06:02

not redder?

Scott (scott@vorthmann.org)
2018-09-10 20:06:04

yes

Scott (scott@vorthmann.org)
2018-09-10 20:06:30

feel free... but I don't feel the need

jrus (me@jacobrus.com)
2018-09-10 20:06:36

did you want it darker than red?

jrus (me@jacobrus.com)
2018-09-10 20:06:43

we could also make the 'brown' a lighter brown

jrus (me@jacobrus.com)
2018-09-10 20:06:50

and the 'cinnamon' a darker reddish brown

Scott (scott@vorthmann.org)
2018-09-10 20:06:57

yes I think so

Scott (scott@vorthmann.org)
2018-09-10 20:07:08

judging from your chips

jrus (me@jacobrus.com)
2018-09-10 20:07:36

or should I get a cinnamon stick and try to match that?

Scott (scott@vorthmann.org)
2018-09-10 20:08:46

lol

Scott (scott@vorthmann.org)
2018-09-10 20:08:52

not important

Scott (scott@vorthmann.org)
2018-09-10 20:08:54

later

jrus (me@jacobrus.com)
2018-09-10 20:09:49

I don't think your original color had much to do with the color of cinnamon sticks, and a web search for "cinnamon color" turns up a very wide range

jrus (me@jacobrus.com)
2018-09-10 20:10:00

but I'm happy to meet your spec

Scott (scott@vorthmann.org)
2018-09-10 20:22:26

Pretty sure I picked the color, then thought of a name

jrus (me@jacobrus.com)
2018-09-10 20:32:21

@Scott okay how about this one?

jrus (me@jacobrus.com)
2018-09-10 20:32:54

I can't figure out the criterion for when slack will show images inline

jrus (me@jacobrus.com)
2018-09-10 20:33:03

maybe I am making it too large

jrus (me@jacobrus.com)
2018-09-10 20:33:43

@Scott you were saying there was something important about the choice of color for "rose"?

jrus (me@jacobrus.com)
2018-09-10 20:34:39

in that version I made brown lighter and cinnamon darker

jrus (me@jacobrus.com)
2018-09-10 20:49:47

you were wondering about blue being made darker? After some more fiddling (lightened the background a touch) it's up so background L* = 81, yellow L* = 75, green L* = 53, red L* = 42, blue L** = 38. I think that will be pretty good contrast for the core built-in colors

jrus (me@jacobrus.com)
2018-09-10 20:50:10

navy (now L** = 25) should still be plenty far from blue

jrus (me@jacobrus.com)
2018-09-10 20:51:14

oh, and white L** = 95

Scott (scott@vorthmann.org)
2018-09-10 21:04:43

ok back

Scott (scott@vorthmann.org)
2018-09-10 21:08:45

I'm starting to really hate cinnamon... just too close. I think we could just darken brown (never used!) and get some room for cinnamon

Scott (scott@vorthmann.org)
2018-09-10 21:09:42

blue still seems too dark to me... pretty far from Zometool blue, I think. I'd like to stay a bit more true for those four.

Scott (scott@vorthmann.org)
2018-09-10 21:09:52

nothing important about rose

jrus (me@jacobrus.com)
2018-09-10 21:09:54

@Scott try this: ```color.red = 193,21,46 color.yellow = 240,169,1 color.blue = 6,96,141 color.green = 14,146,55 color.orange = 231,101,0 color.purple = 134,59,163 color.black = 48,48,51 color.white = 238,241,247 color.olive = 115,104,16 color.lavender = 144,127,227 color.maroon = 131,17,71 color.rose = 252,106,171 color.navy = 52,48,136 color.brown = 176,93,26 color.apple = 123,185,40 color.sand = 187,144,85 color.turquoise = 38,168,146 color.coral = 254,140,139 color.sulfur = 211,224,60 color.cinnamon = 146,41,22 color.spruce = 12,84,55

color.magenta = 219,41,118

color.snubPentagon = 170,27,111 color.snubTriangle = 153,158,0 color.snubDiagonal = 229,221,185

color.slate = 102,126,153 color.mauve = 146,82,131 color.ivory = 229,221,185```

Scott (scott@vorthmann.org)
2018-09-10 21:10:08

ok, trying

jrus (me@jacobrus.com)
2018-09-10 21:10:27

@Scott also, background = 178,205,230

jrus (me@jacobrus.com)
2018-09-10 21:14:45

@Scott we can certainly make blue lighter. I can try to match what a zometool strut looks like after 3d engine has added lighting etc.

Scott (scott@vorthmann.org)
2018-09-10 21:16:22

ok, impressions...

jrus (me@jacobrus.com)
2018-09-10 21:16:30

@Scott do you have any favorite models that use many orbits?

Scott (scott@vorthmann.org)
2018-09-10 21:16:33

based on my current monitor!

Scott (scott@vorthmann.org)
2018-09-10 21:17:03

make a yellow strut, select it, then make the 120 cell with the "polytopes..." command

Scott (scott@vorthmann.org)
2018-09-10 21:17:18

yellow got too close to sulfur, I think... lost a bit too much orange

Scott (scott@vorthmann.org)
2018-09-10 21:17:31

purple is a tad reddish for my taste

Scott (scott@vorthmann.org)
2018-09-10 21:17:48

I actually like green a little darker

Scott (scott@vorthmann.org)
2018-09-10 21:17:57

close-ish to apple now

Scott (scott@vorthmann.org)
2018-09-10 21:18:22

brown is the worst... just darken it, I don't care about balance there

jrus (me@jacobrus.com)
2018-09-10 21:18:40

the previous green was closer to blue, olive, and spruce

Scott (scott@vorthmann.org)
2018-09-10 21:18:47

blue and navy seem distinct enough

Scott (scott@vorthmann.org)
2018-09-10 21:19:08

yes... just a smidge darker would be all I need

Scott (scott@vorthmann.org)
2018-09-10 21:19:43

I'm warming up to the red... now nicely distinct from orange, if not quite the real Zome red

Scott (scott@vorthmann.org)
2018-09-10 21:20:06

highlights get a bit toward the magenta side, but I think it is OK

Scott (scott@vorthmann.org)
2018-09-10 21:20:45

oh, and I still want a bit more orange in coral 😉

Scott (scott@vorthmann.org)
2018-09-10 21:21:07

we don't have to agree, remember... feel free to keep a set where you like them.

Scott (scott@vorthmann.org)
2018-09-10 21:21:22

though it would be nice to have a standard

jrus (me@jacobrus.com)
2018-09-10 21:21:48

I'll try to look at physical zome struts next to the one on screen and see how they compare

Scott (scott@vorthmann.org)
2018-09-10 21:21:53

y'know, don't worry about sulfur and yellow

jrus (me@jacobrus.com)
2018-09-10 21:22:11

you wanted sulfur to stay lighter / greener?

Scott (scott@vorthmann.org)
2018-09-10 21:22:23

could, yes

Scott (scott@vorthmann.org)
2018-09-10 21:23:02

I wish I knew the scales so I could give you more precise direction... or I wish we could do this interactively

jrus (me@jacobrus.com)
2018-09-10 21:23:29

we could do it interactively in the browser version. not sure how close the lighting model is

Scott (scott@vorthmann.org)
2018-09-10 21:24:05

yes, it helps to rotate a model... but not strictly necessary

Scott (scott@vorthmann.org)
2018-09-10 21:25:01

I think we could go a little darker on black and still have room... lighting takes care of contrast with a black background

jrus (me@jacobrus.com)
2018-09-10 21:25:22

the new on is not dark enough?

jrus (me@jacobrus.com)
2018-09-10 21:25:29

okay

Scott (scott@vorthmann.org)
2018-09-10 21:25:41

I see it as charcoal gray (a dark one)

jrus (me@jacobrus.com)
2018-09-10 21:26:05

does it look bad? or you just really want a jet black color?

jrus (me@jacobrus.com)
2018-09-10 21:26:12

[which is also fine]

jrus (me@jacobrus.com)
2018-09-10 21:26:53

to be honest just toning down a few of the most radioactive colors and separating the brownish ones will get most of the way to where I wanted to go :)

Scott (scott@vorthmann.org)
2018-09-10 21:26:55

not quite jet, but say 1/3 the way from where you are to full black

Scott (scott@vorthmann.org)
2018-09-10 21:27:08

I do still want brown to be brown 😉

Scott (scott@vorthmann.org)
2018-09-10 21:27:15

darker

jrus (me@jacobrus.com)
2018-09-10 21:27:31

did you want to try a light cinnamon? or you just want them to look the same?

Scott (scott@vorthmann.org)
2018-09-10 21:27:37

your maroon I would call too purple-y for the name, but I like the distinctiveness

jrus (me@jacobrus.com)
2018-09-10 21:27:54

lots of times "maroon" is at least a bit purple

jrus (me@jacobrus.com)
2018-09-10 21:28:01

but I mostly wanted to separate it

Scott (scott@vorthmann.org)
2018-09-10 21:28:05

yes, its fine

jrus (me@jacobrus.com)
2018-09-10 21:28:23

usually a dark red on the redder side gets called like "burgundy" or "crimson"

jrus (me@jacobrus.com)
2018-09-10 21:28:31

all these color names are pretty arbitrary though

Scott (scott@vorthmann.org)
2018-09-10 21:28:33

for brown, a bit darker, and a bit more to the green side... very dark yellow

jrus (me@jacobrus.com)
2018-09-10 21:28:46

it's why people should use Munsell coordinates instead of random words

Scott (scott@vorthmann.org)
2018-09-10 21:28:50

yes

jrus (me@jacobrus.com)
2018-09-10 21:28:59

you want brown to be yellower?

Scott (scott@vorthmann.org)
2018-09-10 21:29:00

I need to know what Munsell coordinates are

Scott (scott@vorthmann.org)
2018-09-10 21:29:05

yes, and darker

Scott (scott@vorthmann.org)
2018-09-10 21:29:27

like black, it is rarely important... even less common, in fact

Scott (scott@vorthmann.org)
2018-09-10 21:29:49

I'm OK with a few odd orbits being "too dark"

Scott (scott@vorthmann.org)
2018-09-10 21:29:56

to gain distinctiveness

jrus (me@jacobrus.com)
2018-09-10 21:29:56

how is brown with 151,92,0 ?

Scott (scott@vorthmann.org)
2018-09-10 21:30:00

trying

Scott (scott@vorthmann.org)
2018-09-10 21:32:50

I can see the change, but not enough... darker please

Scott (scott@vorthmann.org)
2018-09-10 21:32:59

and perhaps still yellower

jrus (me@jacobrus.com)
2018-09-10 21:33:29

what's the general concept behind the "cinnamon" and "brown" orbits?

Scott (scott@vorthmann.org)
2018-09-10 21:34:21

brown arises very naturally in octahedral symmetry... it almost never appears naturally here, but I wanted a model flipped from octahedral to look right

jrus (me@jacobrus.com)
2018-09-10 21:34:23

all of brown, cinnamon, maroon, and sand seem to be roughly along a line, and all the same color

Scott (scott@vorthmann.org)
2018-09-10 21:35:14

cinnamon is not very common... it is a triple intersection, but perhaps between three secondary circles, I don't remember. It shows up in odd linear transformations only

jrus (me@jacobrus.com)
2018-09-10 21:35:37

what if cinnamon goes back to being a lighter reddish brown then?

jrus (me@jacobrus.com)
2018-09-10 21:35:43

and brown a darker yellowish brown

Scott (scott@vorthmann.org)
2018-09-10 21:35:47

I think I added it only because I wanted to see if many previously "white" directions were actually this triple intersection

Scott (scott@vorthmann.org)
2018-09-10 21:36:40

I like cinnamon where it is... light enough already.

jrus (me@jacobrus.com)
2018-09-10 21:37:02

it just looks almost the same as brown

Scott (scott@vorthmann.org)
2018-09-10 21:37:25

yes, let's make brown more different, leave cinnamon stationary

Scott (scott@vorthmann.org)
2018-09-10 21:37:32

darker yellowish brown

Scott (scott@vorthmann.org)
2018-09-10 21:38:11

I'd like to stop tuning for now, and work on my VSON conversion

jrus (me@jacobrus.com)
2018-09-10 21:38:29

okay, I'll fiddle some more

Scott (scott@vorthmann.org)
2018-09-10 21:38:31

we need more interactivity to wrap up the tuning quickly anyway

Scott (scott@vorthmann.org)
2018-09-10 21:38:51

thank you for your patience

Scott (scott@vorthmann.org)
2018-09-10 21:39:19

bear in mind, in spite of my nitpicking, I'm really happy with the balance you've already brought in

Scott (scott@vorthmann.org)
2018-09-10 21:39:35

I can feel the orbit triangle making me happier 😉

jrus (me@jacobrus.com)
2018-09-10 21:42:15

okay I've moved a bunch around. I'll try to get another set of rgb coordinates in a bit

Scott (scott@vorthmann.org)
2018-09-10 21:42:36

ok

Scott (scott@vorthmann.org)
2018-09-10 21:43:28

Here's my rigorously scientific test model.

jrus (me@jacobrus.com)
2018-09-10 21:43:41

you wanted purple to be bluer?

Scott (scott@vorthmann.org)
2018-09-10 21:44:09

yes, just a little. It has good spacing with lavender, and I know we'll lose a little

jrus (me@jacobrus.com)
2018-09-10 21:44:16

it's fine

jrus (me@jacobrus.com)
2018-09-10 21:44:24

I don't think it'll get too close to 'navy'

Scott (scott@vorthmann.org)
2018-09-10 21:44:31

no, not a problem

Scott (scott@vorthmann.org)
2018-09-10 21:50:49

do you have a newer version of convertShapes, without the wtf logging?

jrus (me@jacobrus.com)
2018-09-10 21:56:15

@Scott

jrus (me@jacobrus.com)
2018-09-10 21:56:18

```color.red = 197,36,49 color.yellow = 240,169,1 color.blue = 6,96,141 color.green = 8,141,50 color.orange = 231,101,0 color.purple = 122,66,171 color.black = 40,40,42 color.white = 238,241,247 color.olive = 116,104,1 color.lavender = 144,127,227 color.maroon = 131,17,71 color.rose = 252,106,171 color.navy = 52,48,136 color.brown = 105,54,1 color.apple = 129,191,30 color.sand = 187,144,85 color.turquoise = 47,174,151 color.coral = 254,140,139 color.sulfur = 196,231,81 color.cinnamon = 144,56,14 color.spruce = 12,84,55

color.magenta = 219,41,118

color.snubPentagon = 170,27,111 color.snubTriangle = 153,158,0 color.snubDiagonal = 229,221,185

color.slate = 102,126,153 color.mauve = 146,82,131 color.ivory = 229,221,185```

jrus (me@jacobrus.com)
2018-09-10 21:56:48

@Scott yes, did you look at my notebook? I think I published the one without that after you forked but before you did anything with your fork :)

jrus (me@jacobrus.com)
2018-09-10 21:57:39

https://beta.observablehq.com/d/b30f26a5f6143d40

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-10 21:58:12

I just commented those lines in convertShapes, but feel free to remove them

jrus (me@jacobrus.com)
2018-09-10 21:58:31

let me add the colors

jrus (me@jacobrus.com)
2018-09-10 21:58:42

actually, gotta eat

Scott (scott@vorthmann.org)
2018-09-10 22:04:07

eating too

Scott (scott@vorthmann.org)
2018-09-10 22:04:59

sorry, was being lazy

jrus (me@jacobrus.com)
2018-09-10 22:28:35

has colors there

jrus (me@jacobrus.com)
2018-09-10 22:39:43

scott, okay, I made a vZome.preferences file and am looking there

jrus (me@jacobrus.com)
2018-09-10 22:39:59

red definitely needs to be oranger, but I don't think it's too light per se

jrus (me@jacobrus.com)
2018-09-10 22:40:15

yellow could also be oranger and a bit darker

jrus (me@jacobrus.com)
2018-09-10 22:40:36

orange can be a bit redder and darker to keep ahead of yellow

jrus (me@jacobrus.com)
2018-09-10 22:43:38

green can be a bit darker and bluer, turquoise can maybe be a bit lighter again to keep ahead of green

jrus (me@jacobrus.com)
2018-09-10 22:46:52

the lighting definitely changes colors vs. illustrator

Scott (scott@vorthmann.org)
2018-09-10 22:53:46

yes, and the lighting is something I need to fix, too... it should really change when toggling the outlines

Scott (scott@vorthmann.org)
2018-09-10 22:53:52

without outlines, it is washed out

Scott (scott@vorthmann.org)
2018-09-10 22:54:20

I'm pretty sure I have white lights... check the default prefs file

Scott (scott@vorthmann.org)
2018-09-10 22:55:02

oops!

Scott (scott@vorthmann.org)
2018-09-10 22:55:28

no, directional.1 and directional.2 are not white... balance them and try again

Scott (scott@vorthmann.org)
2018-09-10 22:56:35

would be nice if we could compare monitors... I'm pretty happy with orange vs yellow

Scott (scott@vorthmann.org)
2018-09-10 22:56:55

we may be inside the range of variability, whitepoint, etc.

jrus (me@jacobrus.com)
2018-09-10 22:58:11

@Scott what should I be doing for the lights?

jrus (me@jacobrus.com)
2018-09-10 22:58:14

just to test?

jrus (me@jacobrus.com)
2018-09-10 22:58:26

if there are colored directional lights that is okay

Scott (scott@vorthmann.org)
2018-09-10 23:00:29

I think the colored lights could be causing your difference w.r.t. Illustrator

Scott (scott@vorthmann.org)
2018-09-10 23:01:03

copy them from the prefs defaults you found, and adjust to balance, lighten, as you see fit

jrus (me@jacobrus.com)
2018-09-10 23:01:13

I don't know about the model view, but I think the direction config view is definitely improved by the color change :)

Scott (scott@vorthmann.org)
2018-09-10 23:01:46

looks like one is slightly blue, one slightly yellow

Scott (scott@vorthmann.org)
2018-09-10 23:02:04

yes

Scott (scott@vorthmann.org)
2018-09-10 23:02:44

that is the orbit triangle, making me happy as I said

jrus (me@jacobrus.com)
2018-09-10 23:02:53

oh wait

jrus (me@jacobrus.com)
2018-09-10 23:03:09

maybe I'm not properly getting the colors in

Scott (scott@vorthmann.org)
2018-09-10 23:03:10

prefs only read on restart, of course

Scott (scott@vorthmann.org)
2018-09-10 23:03:36

~/.vZome.prefs

jrus (me@jacobrus.com)
2018-09-10 23:12:57

@Scott I was trying to remove the prefs and re-load, but I think I might need to explicitly put the old colors there

Scott (scott@vorthmann.org)
2018-09-10 23:15:25

if you remove the prefs, the internal defaults will apply on restart

Scott (scott@vorthmann.org)
2018-09-10 23:15:38

reopening the model file will not do anything

Scott (scott@vorthmann.org)
2018-09-10 23:15:55

sorry, restart is the only time it loads the prefs

Scott (scott@vorthmann.org)
2018-09-10 23:16:14

I think I said that above

jrus (me@jacobrus.com)
2018-09-10 23:16:48

@Scott does something get cached elsewhere?

Scott (scott@vorthmann.org)
2018-09-10 23:16:59

no

jrus (me@jacobrus.com)
2018-09-10 23:17:02

it seems like it is still using my colors from previously

jrus (me@jacobrus.com)
2018-09-10 23:17:06

I'm confusing myself

jrus (me@jacobrus.com)
2018-09-10 23:17:18

I can't seem to get it back to original colors

Scott (scott@vorthmann.org)
2018-09-10 23:17:31

closing the last window quits vZome, on the Mac... but use cmd-Q to be sure

Scott (scott@vorthmann.org)
2018-09-10 23:17:47

you're not recompiling from source, right?

Scott (scott@vorthmann.org)
2018-09-10 23:18:04

😉

Scott (scott@vorthmann.org)
2018-09-10 23:18:25

make sure you're not running two vZome instances somehow

jrus (me@jacobrus.com)
2018-09-10 23:19:51

@Scott I can't seem to get the "direction configuration" view toshow your original radioactive colors whatever I do

jrus (me@jacobrus.com)
2018-09-10 23:20:11

would the model somehow have the colors get saved with it?

Scott (scott@vorthmann.org)
2018-09-10 23:33:14

oh, yes... sorry!

Scott (scott@vorthmann.org)
2018-09-10 23:33:20

very distracted getting kids to bed

Scott (scott@vorthmann.org)
2018-09-10 23:33:36

just use a new model

Scott (scott@vorthmann.org)
2018-09-10 23:34:29

I think you can also just delete the directions part of the XML... we don't have anything automatic here

jrus (me@jacobrus.com)
2018-09-10 23:34:53

@Scott oh, you put the colors in the xml. got it!

Scott (scott@vorthmann.org)
2018-09-10 23:35:36

it is a bad design, but it lets me manually adjust automatic colors once in a while

Scott (scott@vorthmann.org)
2018-09-10 23:35:50

and I do need to store the auto orbits

jrus (me@jacobrus.com)
2018-09-10 23:36:53

it's fine

jrus (me@jacobrus.com)
2018-09-10 23:37:00

I was just confused

Scott (scott@vorthmann.org)
2018-09-10 23:37:06

in the web view, the blue still seems too dark to me

Scott (scott@vorthmann.org)
2018-09-10 23:37:22

but we have a white background there

jrus (me@jacobrus.com)
2018-09-10 23:39:57

maybe want to adjust the lighting on the web version to be comparable

Scott (scott@vorthmann.org)
2018-09-10 23:41:44

yes, we could try, but remember we'd have to make it track the camera... bit of work there

Scott (scott@vorthmann.org)
2018-09-10 23:42:27

we'll want to do it eventually for the "default vZome-y view"

jrus (me@jacobrus.com)
2018-09-10 23:47:17

```color.red = 197,3,20 color.yellow = 245,163,1 color.blue = 6,96,141 color.green = 2,130,53 color.orange = 236,89,1 color.purple = 122,66,171 color.black = 40,40,42 color.white = 238,241,247 color.olive = 116,104,1 color.lavender = 144,127,227 color.maroon = 131,17,71 color.rose = 252,106,171 color.navy = 52,48,136 color.brown = 105,54,1 color.apple = 129,191,30 color.sand = 187,144,85 color.turquoise = 47,174,151 color.coral = 254,140,139 color.sulfur = 196,231,81 color.cinnamon = 144,56,14 color.spruce = 12,84,55

color.magenta = 219,41,118

color.snubPentagon = 170,27,111 color.snubTriangle = 153,158,0 color.snubDiagonal = 229,221,185

color.slate = 102,126,153 color.mauve = 146,82,131 color.ivory = 229,221,185

color.background = 178,205,230 ```

Scott (scott@vorthmann.org)
2018-09-10 23:50:41

launching

jrus (me@jacobrus.com)
2018-09-10 23:51:41

I'm going to darken black a bit more and move turquoise bluer and lighter

jrus (me@jacobrus.com)
2018-09-10 23:55:00

I see what you mean about maroon looking more like "wine" color under this lighting

jrus (me@jacobrus.com)
2018-09-10 23:55:10

it's a nice color though

jrus (me@jacobrus.com)
2018-09-10 23:55:11

:)

jrus (me@jacobrus.com)
2018-09-10 23:55:24

```color.red = 197,3,20 color.yellow = 245,163,1 color.blue = 6,96,141 color.green = 2,130,53 color.orange = 236,89,1 color.purple = 122,66,171 color.black = 36,35,38 color.white = 238,241,247 color.olive = 116,104,1 color.lavender = 144,127,227 color.maroon = 131,17,71 color.rose = 252,106,171 color.navy = 52,48,136 color.brown = 105,54,1 color.apple = 129,191,30 color.sand = 187,144,85 color.turquoise = 53,181,179 color.coral = 254,140,139 color.sulfur = 196,231,81 color.cinnamon = 144,56,14 color.spruce = 12,84,55

color.magenta = 219,41,118

color.snubPentagon = 170,27,111 color.snubTriangle = 153,158,0 color.snubDiagonal = 229,221,185

color.slate = 102,126,153 color.mauve = 146,82,131 color.ivory = 229,221,185

color.background = 178,205,230 ```

jrus (me@jacobrus.com)
2018-09-10 23:56:01

@Scott I think these white balls are fine. end up with more shading vs. ffffff

Scott (scott@vorthmann.org)
2018-09-10 23:57:00

ok

Scott (scott@vorthmann.org)
2018-09-10 23:57:09

green: you darkened, right? looks good

Scott (scott@vorthmann.org)
2018-09-10 23:57:18

turquoise: I agree

Scott (scott@vorthmann.org)
2018-09-10 23:57:31

coral: did you add orange yet?

jrus (me@jacobrus.com)
2018-09-10 23:57:48

I made sulfur too green here vs. apple. since yellow went a bit orangeward we can send sulfur more toward yellow

Scott (scott@vorthmann.org)
2018-09-10 23:57:53

purple: I think you maybe added a trace of blue? could use another trace I think

Scott (scott@vorthmann.org)
2018-09-10 23:58:10

I'm OK with it as is, if you want

Scott (scott@vorthmann.org)
2018-09-10 23:58:17

looks very sulfur-y

Scott (scott@vorthmann.org)
2018-09-10 23:58:33

only the shadows give it a problem, you're right

Scott (scott@vorthmann.org)
2018-09-10 23:58:59

orange: did you darken and redden? I think we've lost a bit of distinction with red

Scott (scott@vorthmann.org)
2018-09-11 00:00:24

sulfur: yeah, a bit less green

jrus (me@jacobrus.com)
2018-09-11 00:00:24

they seem very distinct over here on the bit I just pasted

Scott (scott@vorthmann.org)
2018-09-11 00:00:51

this may come down to monitors and where we have our whitepoints set

jrus (me@jacobrus.com)
2018-09-11 00:01:33

@Scott I can certainly believe that your display is far from sRGB

jrus (me@jacobrus.com)
2018-09-11 00:01:35

:)

Scott (scott@vorthmann.org)
2018-09-11 00:02:04

brown looks good, thanks

Scott (scott@vorthmann.org)
2018-09-11 00:03:37

I don't know how to make my monitor sRGB... you can show me sometime

Scott (scott@vorthmann.org)
2018-09-11 00:04:03

honestly, right now, I could accept everything except sulfur

Scott (scott@vorthmann.org)
2018-09-11 00:04:35

and coral

Scott (scott@vorthmann.org)
2018-09-11 00:04:37

😉

jrus (me@jacobrus.com)
2018-09-11 00:05:08

what did you want to do with sulfur?

jrus (me@jacobrus.com)
2018-09-11 00:08:30

@Scott ```color.red = 197,3,20 color.yellow = 245,163,1 color.blue = 6,96,141 color.green = 2,130,53 color.orange = 236,89,1 color.purple = 122,66,171 color.black = 36,35,38 color.white = 238,241,247 color.olive = 116,104,1 color.lavender = 144,127,227 color.maroon = 141,2,41 color.rose = 252,106,171 color.navy = 52,48,136 color.brown = 105,54,1 color.apple = 129,191,30 color.sand = 187,144,85 color.turquoise = 53,181,179 color.coral = 254,124,123 color.sulfur = 218,225,83 color.cinnamon = 144,56,14 color.spruce = 12,84,55

color.magenta = 219,41,118

color.snubPentagon = 170,27,111 color.snubTriangle = 153,158,0 color.snubDiagonal = 229,221,185

color.slate = 102,126,153 color.mauve = 146,82,131 color.ivory = 229,221,185

color.background = 178,205,230 ```

Scott (scott@vorthmann.org)
2018-09-11 00:13:17

as you suggested, swing the hue back from green a bit

Scott (scott@vorthmann.org)
2018-09-11 00:14:38

did you already? this looks pretty good

Scott (scott@vorthmann.org)
2018-09-11 00:15:02

but I don't think you touched coral

Scott (scott@vorthmann.org)
2018-09-11 00:15:19

oh, you did

Scott (scott@vorthmann.org)
2018-09-11 00:16:04

this is fine @jrus... let's go with it

Scott (scott@vorthmann.org)
2018-09-11 00:16:39

are you happy with it?

jrus (me@jacobrus.com)
2018-09-11 00:18:53

@Scott I think I was still tweaking something, but had to help make a bed

jrus (me@jacobrus.com)
2018-09-11 00:19:42

@Scott oh, I was changing rose and maroon a bit

jrus (me@jacobrus.com)
2018-09-11 00:20:14

```color.red = 197,3,20 color.yellow = 245,163,1 color.blue = 6,96,141 color.green = 2,130,53 color.orange = 236,89,1 color.purple = 113,64,178 color.black = 36,35,38 color.white = 238,241,247 color.olive = 116,104,1 color.lavender = 144,127,227 color.maroon = 141,2,41 color.rose = 251,94,160 color.navy = 52,48,136 color.brown = 105,54,1 color.apple = 129,191,30 color.sand = 187,144,85 color.turquoise = 53,181,179 color.coral = 254,124,123 color.sulfur = 218,225,83 color.cinnamon = 144,56,14 color.spruce = 12,84,55

color.magenta = 219,41,118

color.snubPentagon = 170,27,111 color.snubTriangle = 153,158,0 color.snubDiagonal = 229,221,185

color.slate = 102,126,153 color.mauve = 146,82,131 color.ivory = 229,221,185

color.background = 178,205,230 ```

jrus (me@jacobrus.com)
2018-09-11 00:20:29

@Scott see if there's anything on that one you still think needs some movement

jrus (me@jacobrus.com)
2018-09-11 00:20:51

is this maroon too red?

jrus (me@jacobrus.com)
2018-09-11 00:21:49

@Scott does orange still look red?

Scott (scott@vorthmann.org)
2018-09-11 00:22:40

orange looks great

Scott (scott@vorthmann.org)
2018-09-11 00:22:45

maroon is fine

jrus (me@jacobrus.com)
2018-09-11 00:23:17

I think we ended up toning down my changes vs what I did originally, so that these colors are reasonably close to your original intent while being a bit more distinct

Scott (scott@vorthmann.org)
2018-09-11 00:23:51

I was just about to ask for another side-by-side... I feel like I've squashed your efforts

Scott (scott@vorthmann.org)
2018-09-11 00:24:20

my color memory is fading... you could tell me you were just messing with me, these are the originals 😉

jrus (me@jacobrus.com)
2018-09-11 00:24:48
Scott (scott@vorthmann.org)
2018-09-11 00:27:06

weird how different they look in the swatches vs the orbit triangle vs the lit models

jrus (me@jacobrus.com)
2018-09-11 00:27:26

should be not too far off the orbit triangle

jrus (me@jacobrus.com)
2018-09-11 00:27:45

though background matters

jrus (me@jacobrus.com)
2018-09-11 00:27:48

and outlines

Scott (scott@vorthmann.org)
2018-09-11 00:27:49

yes, it is a nice improvement, mostly for turquoise and sulfur

Scott (scott@vorthmann.org)
2018-09-11 00:28:02

and I like the better separation of red and orange

Scott (scott@vorthmann.org)
2018-09-11 00:28:55

was my sand really that dark?

Scott (scott@vorthmann.org)
2018-09-11 00:29:00

anyway, nicely done

Scott (scott@vorthmann.org)
2018-09-11 00:30:21

Yes, I could try a finer outline circle in the orbit triangle

jrus (me@jacobrus.com)
2018-09-11 00:30:32

it's fine

jrus (me@jacobrus.com)
2018-09-11 00:34:45

okay, I'm going to go do something else for a while. :-)

jrus (me@jacobrus.com)
2018-09-11 00:34:55

maybe we'll go to the exploratorium tomorrow

Scott (scott@vorthmann.org)
2018-09-11 00:40:07

nice. I'm fading, off to bed

Scott (scott@vorthmann.org)
2018-09-11 00:40:10

good night

jrus (me@jacobrus.com)
2018-09-11 00:44:43

@Scott -^

jrus (me@jacobrus.com)
2018-09-11 01:16:26

@Scott for colors more similar to illustrator can always flatten the lighting

color.light.directional.1 = 145, 145, 140
color.light.directional.2 = 140, 140, 150
color.light.directional.3 = 30, 30, 30

color.light.ambient = 100,100,10
jrus (me@jacobrus.com)
2018-09-11 01:17:37
jrus (me@jacobrus.com)
2018-09-11 01:19:04

'lifelike' balls definitely look better with more ambient light

jrus (me@jacobrus.com)
2018-09-11 01:19:11

not quite as high contrast

jrus (me@jacobrus.com)
2018-09-11 10:35:27

@Scott vzome's rendering is so different between outlines on / off

jrus (me@jacobrus.com)
2018-09-11 10:37:12

I'm looking forward to when people's 3D rendering systems have material colors specified multi-spectrally, instead of rgb :)

Scott (scott@vorthmann.org)
2018-09-11 10:50:52

You need to get on the webgl standards body 😁

jrus (me@jacobrus.com)
2018-09-11 10:51:35

@Scott it's definitely possible to write alternative shaders that can deal with this kind of thing

jrus (me@jacobrus.com)
2018-09-11 10:54:18

but nobody bothers because it would be e.g. twice as expensive

Scott (scott@vorthmann.org)
2018-09-11 10:54:21

No need for support from the GPU?

jrus (me@jacobrus.com)
2018-09-11 10:54:32

GPUs can do whatever math you need

jrus (me@jacobrus.com)
2018-09-11 10:55:14

i.e. instead of 3 coordinates for light colors, surface colors, etc., use 6 or 8 coordinates

jrus (me@jacobrus.com)
2018-09-11 10:56:48

if working with "rgb" or "rgba" textures, just use 2 of them and combine the numbers. the gpu doesn't mandate what the numbers should mean

Scott (scott@vorthmann.org)
2018-09-11 10:58:06

At the end of the day it outputs a fragment color, though, right?

jrus (me@jacobrus.com)
2018-09-11 10:58:10

sure

jrus (me@jacobrus.com)
2018-09-11 10:58:22

if by that you mean

jrus (me@jacobrus.com)
2018-09-11 10:58:29

it sends a color to the screen

jrus (me@jacobrus.com)
2018-09-11 10:59:12

@Scott oh if everyone wants to start making multispectral displays that would also be great

jrus (me@jacobrus.com)
2018-09-11 10:59:21

also multispectral cameras

jrus (me@jacobrus.com)
2018-09-11 11:01:01

to be honest I'm somewhat surprised camera vendors haven't tried more already. If instead of just rggb filters in a bayer pattern, they did a more complicated pattern with more color filters, the demosaicing algorithm out the other end would be slightly more complicated but it would be much easier to get good output from strange lighting conditions

jrus (me@jacobrus.com)
2018-09-11 11:01:25

I assume the manufacturing would be a little harder, but I can't imagine it would be that much harder

jrus (me@jacobrus.com)
2018-09-11 11:02:19

cameras should also try to put their pixels in a non-square grid, and they'd avoid a lot of square aliasing artifacts at high frequencies

jrus (me@jacobrus.com)
2018-09-11 11:03:15

it's possible to buy multispectral computer displays but they are at least 10x more expensive than rgb ones

jrus (me@jacobrus.com)
2018-09-11 11:04:35

on the display side as well, especially for stuff like phone displays, I'm surprised there hasn't been more experimenting with additional primaries and non-square pixel grids. the pixel density is so high and variable across hardware that people need to pretty much resample every image that gets shown on screen anyway

Scott (scott@vorthmann.org)
2018-09-11 11:06:56

Multispectral means just a luminance scalar per frequency?

jrus (me@jacobrus.com)
2018-09-11 11:07:10

multispectral means a bunch of primaries

Scott (scott@vorthmann.org)
2018-09-11 11:07:10

For selected fs

jrus (me@jacobrus.com)
2018-09-11 11:08:15

so you get something closer to a full spectral power distribution / reflectance distribution

jrus (me@jacobrus.com)
2018-09-11 11:11:59

basically though, all of our displays and sensors don't actually record or output 3 primaries for each (sub)pixel; the little units that emit color are separate

jrus (me@jacobrus.com)
2018-09-11 11:12:08

and they are in some kind of pattern

jrus (me@jacobrus.com)
2018-09-11 11:13:17

in desktop LCD displays it is typically skinny rectangles RGB RGB RGB ...

jrus (me@jacobrus.com)
2018-09-11 11:13:42

in cameras it is typically a checkerboard RG RG RG RG on one row then GB GB GB GB on the next row

jrus (me@jacobrus.com)
2018-09-11 11:14:42

but there's no reason you couldn't have a whole bunch of different colors

jrus (me@jacobrus.com)
2018-09-11 11:15:08

anyway, time to go

jrus (me@jacobrus.com)
2018-09-11 11:16:39

@Scott you don't need to change the vzome colors any time soon. let's figure out what kind of lighting to use, then under that condition roughly match byrg to the physical zometool ones

Scott (scott@vorthmann.org)
2018-09-11 11:16:50

Ok

jrus (me@jacobrus.com)
2018-09-11 11:17:21

@Scott is there a reason that "with outlines" and "without outlines" rendering in vzome has such different lighting?

jrus (me@jacobrus.com)
2018-09-11 11:17:37

I don't really know which one to target

Scott (scott@vorthmann.org)
2018-09-11 11:18:54

I think the problem is that it is not different, or not enough. The outlines made me want brighter lighting... Washout is less relevant

Scott (scott@vorthmann.org)
2018-09-11 11:20:18

We should set up a lighting scheme or two that we want to target... I think that needs a real keyboard or phone

Scott (scott@vorthmann.org)
2018-09-11 11:20:32

Bandwidth

jrus (me@jacobrus.com)
2018-09-11 11:22:47

also maybe not the top priority of things to work on

Scott (scott@vorthmann.org)
2018-09-11 11:23:15

👌

Scott (scott@vorthmann.org)
2018-09-11 19:42:40

@jrus I think we're handling scale wrong. To explain why I believe that, let me lead up to it.

Scott (scott@vorthmann.org)
2018-09-11 19:43:36

First, I've concluded that it is silly for me to try to map VSON models with their structure intact... far simpler to just extract the line segments, and resolve the model.

Scott (scott@vorthmann.org)
2018-09-11 19:43:51

So that's what I have done. Reshared: https://beta.observablehq.com/d/03d72a1e3a89df69

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-11 19:44:57

Notice that the scale of the model does not match the scale of the parts. Bear in mind that the vertices (ball centers) do not get scaled, and the conclusion is inescapable: our shapes are too small.

Scott (scott@vorthmann.org)
2018-09-11 19:47:44

This is born out by the "all purples" model we were rendering... the struts are too long, and the balls too small.

Scott (scott@vorthmann.org)
2018-09-11 20:32:11

@jrus OK scale issue resolve. convertShapes now scales up by [2,3].

Scott (scott@vorthmann.org)
2018-09-11 20:32:44

resolveModel works nicely with VSON and with hand-crafted... if you remember to scale up a hand-crafted model

Scott (scott@vorthmann.org)
2018-09-11 21:09:48

@jrus I went a little crazy with notebook refactoring.

Scott (scott@vorthmann.org)
2018-09-11 21:10:01

https://beta.observablehq.com/@vorth/wip-importing-vzome-shapes

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-11 21:10:11

https://beta.observablehq.com/@vorth/wip-observable-vzome

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-11 21:10:22

https://beta.observablehq.com/@vorth/wip-importing-vzome-models

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-11 21:15:58

@jrus TLDR: everything is working, refactored into three notebooks above.

Scott (scott@vorthmann.org)
2018-09-11 21:16:13

Now I have a meeting for work. Will check in later.

jrus (me@jacobrus.com)
2018-09-11 21:56:50

@Scott okay, back from a long day out. I'll take a look

Scott (scott@vorthmann.org)
2018-09-11 23:07:31

@jrus ugh, 90 minute call over

jrus (me@jacobrus.com)
2018-09-12 07:32:32

@Scott okay, I actually didn't get a chance last night

jrus (me@jacobrus.com)
2018-09-12 07:32:47

@Scott I added a quick type check to the simplify3 function

jrus (me@jacobrus.com)
2018-09-12 07:32:57

so hopefully you won't get more infinite loops out of it

jrus (me@jacobrus.com)
2018-09-12 07:35:19

I think my type check is going to limit us to 32-bit integers, so only up to powers of phi from –46 to 46 or whatever

Scott (scott@vorthmann.org)
2018-09-12 07:36:56

cool thank you

Scott (scott@vorthmann.org)
2018-09-12 07:37:32

small request: can you add a "vectorsub" function?

Scott (scott@vorthmann.org)
2018-09-12 07:38:13

or do you have one that I missed?

jrus (me@jacobrus.com)
2018-09-12 07:38:56

oh sure

Scott (scott@vorthmann.org)
2018-09-12 07:39:28

head is still full of more ideas... I'll get them in Trello

Scott (scott@vorthmann.org)
2018-09-12 07:40:35

was wrestling with the conflicting demands of having library code in Github and viewable code in Observable, though it will be a while before we're ready for Github

Scott (scott@vorthmann.org)
2018-09-12 07:40:56

I don't see how to escape two copies of everything

Scott (scott@vorthmann.org)
2018-09-12 07:41:31

gotta run now, or miss my bus

jrus (me@jacobrus.com)
2018-09-12 07:41:36

you can make a library

Scott (scott@vorthmann.org)
2018-09-12 07:41:36

have a great day

jrus (me@jacobrus.com)
2018-09-12 07:41:42

and then explain it in a notebook

jrus (me@jacobrus.com)
2018-09-12 07:41:49

that doesn't actually import the library

jrus (me@jacobrus.com)
2018-09-12 07:41:51

no big deal

Scott (scott@vorthmann.org)
2018-09-12 07:44:15

Of course, but they will drift apart inevitably

jrus (me@jacobrus.com)
2018-09-12 07:44:36

well as long as it's clear that one is just an explanation

jrus (me@jacobrus.com)
2018-09-12 07:44:40

then that's even okay

jrus (me@jacobrus.com)
2018-09-12 07:44:57

it can stand on its own even if the library changes

jrus (me@jacobrus.com)
2018-09-12 07:46:54

@Scott for example in a library you might want to use some specialized data type, add a bunch of error checking, write explicit loops instead of using higher-order functions, or the like

jrus (me@jacobrus.com)
2018-09-12 07:47:15

in a notebook you can optimize for the code being short and/or readable

jrus (me@jacobrus.com)
2018-09-12 07:48:23

the original goal of my "zome arithmetic" notebook was to show how short and easy most of the arithmetic is to implement using standard javascript arrays and numbers

jrus (me@jacobrus.com)
2018-09-12 07:49:07

so that's why there's a naive implementation of "simplify" and "gcd" with code showing, and then a hidden cell with the caching ones

jrus (me@jacobrus.com)
2018-09-12 07:55:33

and I have a bunch of code which is more compressed than usual, with multiple statements per line, golden rationals written in the shortest way ([,1] instead of [0,1,1], etc.), trailing }s in short functions on the same line as the return, and so on

jrus (me@jacobrus.com)
2018-09-12 07:57:17

I want to save vertical space, more than write the most maintainable code

Scott (scott@vorthmann.org)
2018-09-12 08:05:58

Gotcha... You would embrace having a copy for view

Scott (scott@vorthmann.org)
2018-09-12 08:06:09

Ok nm

jrus (me@jacobrus.com)
2018-09-12 08:06:50

@Scott I think for a library for this kind of thing I might use typed arrays, for example

jrus (me@jacobrus.com)
2018-09-12 08:07:09

and do more arithmetic in place

Scott (scott@vorthmann.org)
2018-09-12 08:07:33

Yes

jrus (me@jacobrus.com)
2018-09-12 08:07:42

maybe figure out some kind of macro / metaprogramming stuff so I can write reasonable arithmetic without sacrificing performance

jrus (me@jacobrus.com)
2018-09-12 08:08:20

lack of operators in JS is terrible for doing kind of numerical code legibly

Scott (scott@vorthmann.org)
2018-09-12 08:08:26

I just need to have this boundary in mind as I think about the abstractions to introduce later

Scott (scott@vorthmann.org)
2018-09-12 08:08:32

Oh

Scott (scott@vorthmann.org)
2018-09-12 08:08:40

Looked again at Julia

jrus (me@jacobrus.com)
2018-09-12 08:09:05

julia would be great for "zome arithmetic" in a general context I think

Scott (scott@vorthmann.org)
2018-09-12 08:09:07

Would be great to do it there, use it here somehow

jrus (me@jacobrus.com)
2018-09-12 08:09:26

you could probably just write your own basic arithmetic types and then just use existing code for everything else

jrus (me@jacobrus.com)
2018-09-12 08:09:40

and have it all be pretty fast

Scott (scott@vorthmann.org)
2018-09-12 08:10:47

👍

jrus (me@jacobrus.com)
2018-09-12 09:02:15

@Scott if you get the chance sometime, check if importing my latest "zome arithmetic" notebook causes you any errors

Scott (scott@vorthmann.org)
2018-09-12 09:05:22

Ok tonight

jrus (me@jacobrus.com)
2018-09-12 09:37:50

@Scott when I added some error checks it made me realize that orbit2 wasn't sufficiently normalizing its inputs, so I also changed that one a bit

jrus (me@jacobrus.com)
2018-09-12 09:38:09

I think it shouldn't break anything

Scott (scott@vorthmann.org)
2018-09-12 09:45:21

Ok

jrus (me@jacobrus.com)
2018-09-12 09:47:03

you are importing gcd in your notebooks, but not using it

jrus (me@jacobrus.com)
2018-09-12 09:47:11

in general use the caching gcdc version

jrus (me@jacobrus.com)
2018-09-12 09:47:15

if you do need it

Scott (scott@vorthmann.org)
2018-09-12 09:48:53

👌

jrus (me@jacobrus.com)
2018-09-12 09:49:01

also, you don't have to credit me for "most of the fresh ideas and clever, clear implementation"

jrus (me@jacobrus.com)
2018-09-12 09:49:43

though I appreciate the sentiment :)

Scott (scott@vorthmann.org)
2018-09-12 09:49:58

😄 seems accurate enough.

jrus (me@jacobrus.com)
2018-09-12 17:38:12

@Scott well the 3js thing seems to get a big bogged down with 4000 balls and 4000 struts

jrus (me@jacobrus.com)
2018-09-12 17:38:14

https://beta.observablehq.com/d/2e8ce673ce903f8c

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-12 17:38:25

the list of 4000 quaternions is definitely not necessary :)

jrus (me@jacobrus.com)
2018-09-12 17:39:21

the actual resolveSegments function seems to be plenty fast

Scott (scott@vorthmann.org)
2018-09-12 17:39:36

Rofl

jrus (me@jacobrus.com)
2018-09-12 17:40:07

I just took 6 red struts along different axes, and made a path permuting them every possible way

Scott (scott@vorthmann.org)
2018-09-12 17:40:32

Perf testing on purpose? Or you just have a big model?

Scott (scott@vorthmann.org)
2018-09-12 17:40:38

Oh

jrus (me@jacobrus.com)
2018-09-12 17:40:41

you can see my code

Scott (scott@vorthmann.org)
2018-09-12 17:41:27

Damn combinatorics. Gets us every time

Scott (scott@vorthmann.org)
2018-09-12 17:43:10

Phone dying. Rendering your model, or maybe even your code, might put me under.

Scott (scott@vorthmann.org)
2018-09-12 17:43:25

I'll see when I get home in 15

jrus (me@jacobrus.com)
2018-09-12 17:55:40

@Scott it's also possible it's just that the rotation speed on the mouse control is set way way too slow

Scott (scott@vorthmann.org)
2018-09-12 18:03:56

no, we are paying for the multiple instances... lack of deduplication

Scott (scott@vorthmann.org)
2018-09-12 18:05:19

rendering 4000 meshes that overlap perhaps 120 unique meshes

Scott (scott@vorthmann.org)
2018-09-12 18:40:56

<sigh> parent information night at school. catch you later

jrus (me@jacobrus.com)
2018-09-12 21:27:32
jrus (me@jacobrus.com)
2018-09-12 21:27:33

@Scott there's my model in zometool -^

jrus (me@jacobrus.com)
2018-09-12 21:27:50

and terrible lighting

Scott (scott@vorthmann.org)
2018-09-12 21:27:58

dude, you need some triple-cross bobs

Scott (scott@vorthmann.org)
2018-09-12 21:28:06

the 6-cube

jrus (me@jacobrus.com)
2018-09-12 21:28:08

I kinda like red balls :)

Scott (scott@vorthmann.org)
2018-09-12 21:28:26

skipping the obvious tasteless joke

jrus (me@jacobrus.com)
2018-09-12 21:29:27

@Scott so the cool thing about this shape is that every white node has a different combination of 6 directions

Scott (scott@vorthmann.org)
2018-09-12 21:29:42

up to symmetry, though, right?

jrus (me@jacobrus.com)
2018-09-12 21:29:54

none have struts going out opposite sides

Scott (scott@vorthmann.org)
2018-09-12 21:29:54

so this is NOT a 6-cube projection

Scott (scott@vorthmann.org)
2018-09-12 21:30:11

?

Scott (scott@vorthmann.org)
2018-09-12 21:30:33

I think the no-straight-through is true of the red 6-cube also

Scott (scott@vorthmann.org)
2018-09-12 21:30:38

is there a small RT in the middle?

jrus (me@jacobrus.com)
2018-09-12 21:31:38

so you can figure out how many nodes there are by taking 2^6

jrus (me@jacobrus.com)
2018-09-12 21:31:50

because we have every combination of + or - for each of the 6 directions

jrus (me@jacobrus.com)
2018-09-12 21:32:08

maybe a 6 cube projection?

jrus (me@jacobrus.com)
2018-09-12 21:32:32

so anyway, arguably the whole symmetry system of the icosahedron could be just a projection of relations in the 6-dimensional integer lattice

Scott (scott@vorthmann.org)
2018-09-12 21:32:40

oh, right, I was thinking about configurations, not absolute zones... it is a 6-cube

Scott (scott@vorthmann.org)
2018-09-12 21:33:41

so there are 12 balls on the outside with symmetric orientation of 6 struts... all the same configuration, but yes, each one is oriented differently

Scott (scott@vorthmann.org)
2018-09-12 21:35:16

you should read what David Richter wrote about the relationship between Zome and the E8 lattice

Scott (scott@vorthmann.org)
2018-09-12 21:35:29

I thought it was a Bridges paper, but I'm not sure any more

jrus (me@jacobrus.com)
2018-09-12 21:36:39

we're going to walk the dog

jrus (me@jacobrus.com)
2018-09-12 21:36:43

catch you in a while

Scott (scott@vorthmann.org)
2018-09-12 21:36:49

ok later

Scott (scott@vorthmann.org)
2018-09-12 22:04:14

I think that is the only paper about the E8 relationship.

Scott (scott@vorthmann.org)
2018-09-12 22:09:40

Funny, he has the same folded Coxeter diagram that David had in 2005

Scott (scott@vorthmann.org)
2018-09-12 22:10:24

I'll try Dechant, but I'm afraid it will be over my head

Scott (scott@vorthmann.org)
2018-09-12 22:10:27

thank you

jrus (me@jacobrus.com)
2018-09-12 22:10:32

I didn't really follow it

jrus (me@jacobrus.com)
2018-09-12 22:10:40

but didn't put the time in to really try to understand

Scott (scott@vorthmann.org)
2018-09-12 22:11:21
jrus (me@jacobrus.com)
2018-09-12 22:12:07

rather the 3 small ones

Scott (scott@vorthmann.org)
2018-09-12 22:12:22

and I have to mention my own paper with David: http://archive.bridgesmathart.org/2006/bridges2006-429.html

archive.bridgesmathart.org
jrus (me@jacobrus.com)
2018-09-12 22:12:28

I should try the 24-cell ones

Scott (scott@vorthmann.org)
2018-09-12 22:12:43

yes

jrus (me@jacobrus.com)
2018-09-12 22:13:46

I need to order some more red struts now

Scott (scott@vorthmann.org)
2018-09-12 22:13:52

lol

Scott (scott@vorthmann.org)
2018-09-12 22:14:25

reminds me... I've agreed to present a short talk about some Zome math thing, at the Celebration of Mind at Stanford, late Oct

Scott (scott@vorthmann.org)
2018-09-12 22:14:40

it is a fun night, you should come down

jrus (me@jacobrus.com)
2018-09-12 22:14:58

okay, ask me closer to the date. that's far out for me to plan :)

Scott (scott@vorthmann.org)
2018-09-12 22:15:41

Oct 20, will do

Scott (scott@vorthmann.org)
2018-09-12 22:16:17

I'll be prepping, and I think I need to order more struts. All of mine seem to be in the ceiling

jrus (me@jacobrus.com)
2018-09-12 22:16:23

heh

jrus (me@jacobrus.com)
2018-09-12 22:16:46

the best deal for struts is those 'hyperdo' kits

jrus (me@jacobrus.com)
2018-09-12 22:16:54

assuming they include some of the ones youwant

Scott (scott@vorthmann.org)
2018-09-12 22:17:09

yes, I like that one... lot of bang for the buck

Scott (scott@vorthmann.org)
2018-09-12 22:17:42

I need to print some too, though

Scott (scott@vorthmann.org)
2018-09-12 22:17:45

gotta get on that

jrus (me@jacobrus.com)
2018-09-12 22:17:45

I got a whole bunch of "creator 3" kits on ebay for unusually cheap prices a few years ago

Scott (scott@vorthmann.org)
2018-09-12 22:17:51

nice!

jrus (me@jacobrus.com)
2018-09-12 22:18:22

in general the kits other than the hyperdo one aren't really worth it

jrus (me@jacobrus.com)
2018-09-12 22:18:26

vs. just buying bulk parts

jrus (me@jacobrus.com)
2018-09-12 22:18:36

or used stuff on ebay

Scott (scott@vorthmann.org)
2018-09-12 22:18:52

do you want me to tackle removing duplicates in resolveModel?

Scott (scott@vorthmann.org)
2018-09-12 22:18:56

sorry resolveSegments

jrus (me@jacobrus.com)
2018-09-12 22:19:25

sure, or I can do that

jrus (me@jacobrus.com)
2018-09-12 22:19:28

it's not too hard

Scott (scott@vorthmann.org)
2018-09-12 22:19:33

definitely within my reach, though my code won't be as elegant

jrus (me@jacobrus.com)
2018-09-12 22:19:59

if you want 1st generation extra long struts, https://www.ebay.com/itm/372431276457

eBay
Scott (scott@vorthmann.org)
2018-09-12 22:20:33

hmmm... first gen were pretty crappy, too easy to pop out, sharp edges, etc.

jrus (me@jacobrus.com)
2018-09-12 22:20:54

they don't pop out that easily. they're pretty tight. mostly they are just "different"

Scott (scott@vorthmann.org)
2018-09-12 22:21:10

wow, that is really early!

jrus (me@jacobrus.com)
2018-09-12 22:21:15

they are much harder to break

Scott (scott@vorthmann.org)
2018-09-12 22:21:39

very true... I traded some to Rick Sommer on that basis, to get some modern ones 😉

jrus (me@jacobrus.com)
2018-09-12 22:21:58

yeah $40 with free shipping is a good deal for that one. wonder how many snipe bids it will get

jrus (me@jacobrus.com)
2018-09-12 22:22:20

I might want to bid on that one even

jrus (me@jacobrus.com)
2018-09-12 22:22:29

I haven't looked at zometool on ebay for a long time

jrus (me@jacobrus.com)
2018-09-12 22:23:30

oh wow wtf why did this person have so many red struts in white? https://www.ebay.com/itm/223120514086

eBay
jrus (me@jacobrus.com)
2018-09-12 22:24:22

oh, it's paul hildebrandt

jrus (me@jacobrus.com)
2018-09-12 22:24:24

that explains it

Scott (scott@vorthmann.org)
2018-09-12 22:24:39

seller is Paul!

Scott (scott@vorthmann.org)
2018-09-12 22:24:46

rofl

jrus (me@jacobrus.com)
2018-09-12 22:25:08

I wonder what those were for

Scott (scott@vorthmann.org)
2018-09-12 22:25:12

art

Scott (scott@vorthmann.org)
2018-09-12 22:25:18

that's why they made black and white

jrus (me@jacobrus.com)
2018-09-12 22:25:37

I wonder what art project needed a ton of red struts in white

Scott (scott@vorthmann.org)
2018-09-12 22:25:42

cuz, y'know, real art can't use primary colors

jrus (me@jacobrus.com)
2018-09-12 22:25:44

1148 of them

Scott (scott@vorthmann.org)
2018-09-12 22:26:09

I think architecture, in this case... RT-based zonohedral buildings

jrus (me@jacobrus.com)
2018-09-12 22:26:13

I am a fan of the primary colors

Scott (scott@vorthmann.org)
2018-09-12 22:26:21

Paul was going to try to build housing at one point, I believe

jrus (me@jacobrus.com)
2018-09-12 22:26:28

out of zometool?

Scott (scott@vorthmann.org)
2018-09-12 22:26:31

lol

Scott (scott@vorthmann.org)
2018-09-12 22:26:37

no, just using it to design

jrus (me@jacobrus.com)
2018-09-12 22:26:42

I like the alternative colors for some explanatory purpose

Scott (scott@vorthmann.org)
2018-09-12 22:27:01

I'm tempted by the old box kit, but mostly for the box!

jrus (me@jacobrus.com)
2018-09-12 22:27:06

e.g. having the red balls in this model I just made

Scott (scott@vorthmann.org)
2018-09-12 22:27:09

have too many longs already

jrus (me@jacobrus.com)
2018-09-12 22:27:14

makes it a lot easier to tell what's going on

Scott (scott@vorthmann.org)
2018-09-12 22:27:17

yes

Scott (scott@vorthmann.org)
2018-09-12 22:30:19

I'm thinking I need to give some love to vZome itself for a night or three... get a new build out with some export/copy features for us.

jrus (me@jacobrus.com)
2018-09-12 22:30:27

cheers

Scott (scott@vorthmann.org)
2018-09-12 22:30:33

later

jrus (me@jacobrus.com)
2018-09-12 22:30:33

I'll work on deduplication

Scott (scott@vorthmann.org)
2018-09-12 22:30:38

oh, thanks

jrus (me@jacobrus.com)
2018-09-12 22:31:43

@Scott and I definitely want to try to make new mouse handling

jrus (me@jacobrus.com)
2018-09-12 22:31:50

this one is driving me crazy

Scott (scott@vorthmann.org)
2018-09-12 22:31:55

really, work on whatever is fun for you... leave me some low-hanging fruit 😉

jrus (me@jacobrus.com)
2018-09-12 22:32:15

every time the mouse leaves the frame where the rendered cells are, it stops spinning

Scott (scott@vorthmann.org)
2018-09-12 22:33:54

but starts again if you cross another cell... pretty unpleasant

Scott (scott@vorthmann.org)
2018-09-12 22:34:19

also you cannot right-click within a cell (like on an import link)... event is eaten

jrus (me@jacobrus.com)
2018-09-12 22:34:45

oh, it also eats my text selection efforts everywhere on the page

Scott (scott@vorthmann.org)
2018-09-12 22:35:26

I consider that low-hanging fruit... just needs perseverance and doc reading, etc.

Scott (scott@vorthmann.org)
2018-09-12 22:35:35

I can work on it

jrus (me@jacobrus.com)
2018-09-12 22:35:38

I'm going to try to implement something with d3-drag

jrus (me@jacobrus.com)
2018-09-12 22:35:42

at some point

jrus (me@jacobrus.com)
2018-09-12 22:36:08

d3-drag gets a lot of stuff right that I wanted to do myself years ago

jrus (me@jacobrus.com)
2018-09-12 22:36:22

when frustrated with browser mouse handling

Scott (scott@vorthmann.org)
2018-09-12 22:36:31

sounds good

jrus (me@jacobrus.com)
2018-09-12 22:36:57

the hard part with GUIs is still (as ever) managing state

jrus (me@jacobrus.com)
2018-09-12 22:37:21

e.g. what is selected, what is being clicked and dragged, when should the selection change vs. objects get moved, etc.

jrus (me@jacobrus.com)
2018-09-12 22:37:52

should the mouse movement update objects in place, or keep record of the start of the movement and be ready to revert the whole action

jrus (me@jacobrus.com)
2018-09-12 22:37:57

should there be an undo stack

jrus (me@jacobrus.com)
2018-09-12 22:37:58

etc. etc.

jrus (me@jacobrus.com)
2018-09-12 22:38:33

I feel like web + mobile have caused a serious regression in all mouse + keyboard UI stuff

jrus (me@jacobrus.com)
2018-09-12 22:39:12

desktop apps today are typically worse at a lot of it vs. mac apps from 1995

jrus (me@jacobrus.com)
2018-09-12 22:39:49

figuring out how to handle all the edge cases in a reasonable way is still just as hard now as it was then

jrus (me@jacobrus.com)
2018-09-12 22:39:53

but people put less effort in

jrus (me@jacobrus.com)
2018-09-12 22:40:08

and there's a lot of half-broken defaults they fall back on

Scott (scott@vorthmann.org)
2018-09-12 22:40:09

undo stack, state management... that's all above the level of events.

jrus (me@jacobrus.com)
2018-09-12 22:40:36

if I want to make e.g. a little tool for editing bezier curves

Scott (scott@vorthmann.org)
2018-09-12 22:40:49

a lot of example code you'll see is just too ... example-y

jrus (me@jacobrus.com)
2018-09-12 22:40:53

there's a lot of possible choices to make about how the mouse interaction should work

Scott (scott@vorthmann.org)
2018-09-12 22:41:03

doesn't lead you to a framework for thinking about it.

Scott (scott@vorthmann.org)
2018-09-12 22:41:22

seriously, ... look at Thinking in React

Scott (scott@vorthmann.org)
2018-09-12 22:41:56

again, perhaps not obvious how to map to a geometric state, but I don't expect that to give you much trouble

jrus (me@jacobrus.com)
2018-09-12 22:42:01

I haven't actually seen a react app with a UI for doing "content creation" type workloads that I really liked

jrus (me@jacobrus.com)
2018-09-12 22:42:08

maybe they exist

Scott (scott@vorthmann.org)
2018-09-12 22:42:34

even if they don't, that is not an impossibility proof 😉

jrus (me@jacobrus.com)
2018-09-12 22:42:48

but most of the stuff seems geared toward "how can I made a web browser displaying a glorified email client bring a cutting edge computer to its knees"

jrus (me@jacobrus.com)
2018-09-12 22:43:06

with bonus surveillance

jrus (me@jacobrus.com)
2018-09-12 22:43:07

:P

Scott (scott@vorthmann.org)
2018-09-12 22:43:08

more likely an inverse correlation between math programmers and software engineers, or something

Scott (scott@vorthmann.org)
2018-09-12 22:43:25

yes, that's kinda what I mean

Scott (scott@vorthmann.org)
2018-09-12 22:43:35

but state is state

Scott (scott@vorthmann.org)
2018-09-12 22:43:48

model yours well, and your events well, and I don't see how you could fail

jrus (me@jacobrus.com)
2018-09-12 22:44:08

@Scott but e.g. I want to make a little categorical color picker so we can see hue/lightness of all the vzome colors

jrus (me@jacobrus.com)
2018-09-12 22:44:20

I can do a passable thing with just d3

jrus (me@jacobrus.com)
2018-09-12 22:44:35

but it gets harder and harder to add features

Scott (scott@vorthmann.org)
2018-09-12 22:44:43

sure, but I don't know if it will help you build the next cool thingy very much

jrus (me@jacobrus.com)
2018-09-12 22:44:43

slash handle edge cases

jrus (me@jacobrus.com)
2018-09-12 22:44:57

react (and the like) seem neat

jrus (me@jacobrus.com)
2018-09-12 22:45:01

I should play with them more

Scott (scott@vorthmann.org)
2018-09-12 22:46:18

draw me a wireframe, talk me through it, and I'll happily try the React modeling

Scott (scott@vorthmann.org)
2018-09-12 22:46:54

I gained a little bit of expertise with my vZome client/server thing... so I went beyond the simple form-like stuff

Scott (scott@vorthmann.org)
2018-09-12 22:46:59

just a little

jrus (me@jacobrus.com)
2018-09-12 22:48:35

cool

jrus (me@jacobrus.com)
2018-09-12 22:48:51

@Scott let me write a new vZomeRenderer thingy for now

jrus (me@jacobrus.com)
2018-09-12 22:48:59

er wait

jrus (me@jacobrus.com)
2018-09-12 22:49:05

I mean shapeWhatever

Scott (scott@vorthmann.org)
2018-09-12 22:49:29

segmentResolver?

jrus (me@jacobrus.com)
2018-09-12 22:49:36

resolveSegments ?

Scott (scott@vorthmann.org)
2018-09-12 22:49:41

yes 😉

Scott (scott@vorthmann.org)
2018-09-12 22:49:52

just for braggin'...: https://codepen.io/scottvorthmann/pen/xrVaPw

CodePen
Scott (scott@vorthmann.org)
2018-09-12 22:50:06

clunky as hell, but it was fun

Scott (scott@vorthmann.org)
2018-09-12 22:50:54

I'm not so good at CSS, as you can tell

jrus (me@jacobrus.com)
2018-09-12 22:51:19

:P

Scott (scott@vorthmann.org)
2018-09-12 22:51:45

hmm, either it is broken, or I've forgotten how it works

Scott (scott@vorthmann.org)
2018-09-12 22:52:56

the heptagon one was more fun

jrus (me@jacobrus.com)
2018-09-12 22:54:24

did you ever make this 6-cube thingy? it's pretty interesting

jrus (me@jacobrus.com)
2018-09-12 22:54:31

the physical shape

Scott (scott@vorthmann.org)
2018-09-12 22:54:53

yes, I made it with the triple (and double?) red bobs. Want me to send you a bunch?

jrus (me@jacobrus.com)
2018-09-12 22:54:56

good use for your 3-way-intersection bobs if you want to buy a whole lot of them

jrus (me@jacobrus.com)
2018-09-12 22:55:14

nah that's okay

jrus (me@jacobrus.com)
2018-09-12 22:55:30

I don't plan to deconstruct or make it again anytime soon

jrus (me@jacobrus.com)
2018-09-12 22:57:40

though it did get a lot easier once I understood how the shape worked

jrus (me@jacobrus.com)
2018-09-12 22:57:49

I started building from one side inward

jrus (me@jacobrus.com)
2018-09-12 22:57:56

and the part on that side of the middle was a pain

jrus (me@jacobrus.com)
2018-09-12 22:58:04

then I did the rest of the middle and worked back out

Scott (scott@vorthmann.org)
2018-09-12 22:58:11

ha yes

jrus (me@jacobrus.com)
2018-09-12 22:58:11

which was a whole lot easier

Scott (scott@vorthmann.org)
2018-09-12 22:58:46

the bobs are pretty forgiving, but I was worried (unnecessarily) about breaking them during deconstruction

jrus (me@jacobrus.com)
2018-09-12 22:59:48

there's a whole lot of interesting internal structure

Scott (scott@vorthmann.org)
2018-09-12 22:59:59

yes

jrus (me@jacobrus.com)
2018-09-12 22:59:59

could spend quite a while thinking about it

Scott (scott@vorthmann.org)
2018-09-12 23:00:17

can you see all the cubes?

jrus (me@jacobrus.com)
2018-09-12 23:00:20

yes

jrus (me@jacobrus.com)
2018-09-12 23:01:33

I think they are all congruent actually

Scott (scott@vorthmann.org)
2018-09-12 23:01:33

I want to build one that is removing hidden cells... no overlapping cubes. May not be that interesting. The yellow-strut 10-cube is really only doable in that fashion, physically

jrus (me@jacobrus.com)
2018-09-12 23:03:26

so I think it is the case that every zome-representable point has a unique representation as a sum of 6 (half-)integer red directions

jrus (me@jacobrus.com)
2018-09-12 23:05:59

oh I guess they aren't all congruent

jrus (me@jacobrus.com)
2018-09-12 23:06:06

there are flat ones

jrus (me@jacobrus.com)
2018-09-12 23:10:06

oh and pointy ones

jrus (me@jacobrus.com)
2018-09-12 23:10:19

aligned with the 3-fold axes

jrus (me@jacobrus.com)
2018-09-12 23:11:12

there is an embedded dodecahedron from which you can make a bunch of blue cubes

jrus (me@jacobrus.com)
2018-09-12 23:11:38

multiple dodecahedra I guess

jrus (me@jacobrus.com)
2018-09-12 23:12:33

which is to say 2

jrus (me@jacobrus.com)
2018-09-13 00:00:48

@Scott is there a meetup this month?

Scott (scott@vorthmann.org)
2018-09-13 00:01:57

yes, maybe 20-somethingth

jrus (me@jacobrus.com)
2018-09-13 00:02:01

@Scott oh, I figured out one more reason I like putting foo = function foo(...) {...}

Scott (scott@vorthmann.org)
2018-09-13 00:02:08

should hear about it any day now

Scott (scott@vorthmann.org)
2018-09-13 00:02:12

ok, why?

jrus (me@jacobrus.com)
2018-09-13 00:02:14

sometimes I decide to add some dependencies in the cell

Scott (scott@vorthmann.org)
2018-09-13 00:02:22

right...

Scott (scott@vorthmann.org)
2018-09-13 00:02:26

easy to add {}

jrus (me@jacobrus.com)
2018-09-13 00:02:35

and then it ends up as foo = { ..... return function foo(...) {...} }

Scott (scott@vorthmann.org)
2018-09-13 00:02:43

ya

Scott (scott@vorthmann.org)
2018-09-13 00:02:50

https://beta.observablehq.com/@vorth/wip-importing-vzome-models

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-13 00:03:20

red-quaternion projection of 120-cell, using copy.vson command

Scott (scott@vorthmann.org)
2018-09-13 00:03:41

too big to paste in a cell (literally... it gets truncated), so pasted in a gist

Scott (scott@vorthmann.org)
2018-09-13 00:04:36

too many steps, feels like... I'd like vZome to do OAuth login to Github, make the gist, and copy the cell Javascript to the clipboard

Scott (scott@vorthmann.org)
2018-09-13 00:05:15

need more lights in our renderer... all too dark

jrus (me@jacobrus.com)
2018-09-13 00:06:30

@Scott can we also prevent 3js from disappearing further away elements?

jrus (me@jacobrus.com)
2018-09-13 00:06:35

or increase the depth?

Scott (scott@vorthmann.org)
2018-09-13 00:06:55

yes, I have been meaning to do that... simple change to renderer

Scott (scott@vorthmann.org)
2018-09-13 00:07:05

("red-quaternion" means that I set three parts of a quaternion from a red strut)

jrus (me@jacobrus.com)
2018-09-13 00:08:29

cool

Scott (scott@vorthmann.org)
2018-09-13 00:10:55

ok far plane is now 4000

Scott (scott@vorthmann.org)
2018-09-13 00:12:14

I don't like their approach to zoom... I think they are just dollying the camera back and forth. vZome's is better... maybe does it by scaling, I don't remember

Scott (scott@vorthmann.org)
2018-09-13 00:12:48

reload your notebooks

Scott (scott@vorthmann.org)
2018-09-13 00:13:54

New command in my custom menu file

Scott (scott@vorthmann.org)
2018-09-13 00:14:21

build that supports it will come soon

jrus (me@jacobrus.com)
2018-09-13 00:35:29

@Scott okay I'll take a look

jrus (me@jacobrus.com)
2018-09-13 00:38:57

@Scott ```resolveSegments = {

class IndexedSet { constructor() { this.contents = []; this.map = new Map; } add(item) { const itemhash = JSON.stringify(item); let index = this.map.get(itemhash); if (!index) { index = this.contents.length; this.contents.push(item); this.map.set(itemhash, index); } return index; } }

return function resolveSegments( segments ) { const scale = [2,3,1]; // phi cubed const vertices = new IndexedSet, quaternions = new IndexedSet, balls = new IndexedSet, struts = new IndexedSet, strutdata = [];

for (let segment of segments) {
  const startpoint = scalarmul(scale, segment[0]);
  const endpoint = scalarmul(scale, segment[1]);
  const startindex = vertices.add(startpoint);
  const endindex = vertices.add(endpoint);
  balls.add(startindex), balls.add(endindex);
  struts.add([startindex,endindex].sort());
}

for (let [startindex, endindex] of struts.contents) {
  const startpoint = vertices.contents[startindex];
  const endpoint = vertices.contents[endindex];
  const displacement = vectorsub(endpoint, startpoint);
  const [orbit, quaternion, reflected, length] = orbit2(displacement);
  const quatindex = quaternions.add(quaternion);
  strutdata.push({
    orbit: JSON.stringify(orbit), orientation: quatindex,
    start: reflected ? endindex : startindex, length: length });
}

return {
  vertices: vertices.contents, balls: balls.contents,
  quaternions: quaternions.contents, struts: strutdata };

} }```

jrus (me@jacobrus.com)
2018-09-13 00:39:09

@Scott https://beta.observablehq.com/d/2e8ce673ce903f8c

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-13 00:41:49

@Scott redsegments got a whole lot smaller (!)

jrus (me@jacobrus.com)
2018-09-13 00:42:26

not quite sure why it has 65 balls instead of 64 to be honest

jrus (me@jacobrus.com)
2018-09-13 00:42:41

or 13 quaternions, etc.

jrus (me@jacobrus.com)
2018-09-13 00:43:13

I might be accidentally adding some segments someplace

jrus (me@jacobrus.com)
2018-09-13 00:49:55

oh I know why. it's because I'm testing if !index instead of if index isn't null

jrus (me@jacobrus.com)
2018-09-13 00:51:44

@Scott that should perform pretty well under any typical use case

Scott (scott@vorthmann.org)
2018-09-13 00:56:56

Nice!

Scott (scott@vorthmann.org)
2018-09-13 00:57:49

Good night. vZome regressions running. Will merge to master and build tomorrow

jrus (me@jacobrus.com)
2018-09-13 00:58:04

cheers

jrus (me@jacobrus.com)
2018-09-13 00:58:11

feel free to drop that code into your notebook

jrus (me@jacobrus.com)
2018-09-13 00:58:27

it should be self-contained (I think)

jrus (me@jacobrus.com)
2018-09-13 00:58:48

besides scalarmul, vectorsub which you already had

jrus (me@jacobrus.com)
2018-09-13 01:00:43

the slowest part is probably doing a JSON.stringify a whole bunch of times

jrus (me@jacobrus.com)
2018-09-13 01:00:53

but yay for native implementation

jrus (me@jacobrus.com)
2018-09-13 01:01:41

it's not the ideal way to compare numerical data, but it should work okay

Scott (scott@vorthmann.org)
2018-09-13 07:34:06

I take comfort knowing that Map.get is probably the most heavily optimized and most often executed code on the planet

Scott (scott@vorthmann.org)
2018-09-13 07:41:10

also it is good to know that you will use the occasional class under extreme duress (four instances at once) 😉

Scott (scott@vorthmann.org)
2018-09-13 07:42:12

very clean code as usual

jrus (me@jacobrus.com)
2018-09-13 08:51:50

@Scott well I could do a javascript prototypal thingy

jrus (me@jacobrus.com)
2018-09-13 08:52:06

I haven't really used the new type of javascript classes much

jrus (me@jacobrus.com)
2018-09-13 08:52:17

it's been a few years since I was heavily doing JS stuff

Scott (scott@vorthmann.org)
2018-09-13 08:52:48

Not criticizing, just teasing

jrus (me@jacobrus.com)
2018-09-13 08:53:56

coffeescript (v1) had "classes" like this https://coffeescript.org/v1/#classes

jrus (me@jacobrus.com)
2018-09-13 08:54:08

look over at the right side to see the generated javascript

jrus (me@jacobrus.com)
2018-09-13 08:55:45

@Scott the alternative to using a class in our zome code would be to make a function which operates on an object with a map and list inside. not worth the trouble :)

Scott (scott@vorthmann.org)
2018-09-13 08:55:55

Yeah, and all that mess is still there, just hidden and optimized

jrus (me@jacobrus.com)
2018-09-13 08:56:07

probably not optimized

jrus (me@jacobrus.com)
2018-09-13 08:56:20

new JS features are generally slower

jrus (me@jacobrus.com)
2018-09-13 08:56:41

or at least that was the case a couple years ago. I'm sure they are working on it

jrus (me@jacobrus.com)
2018-09-13 08:56:58

Map might be faster than object for this one, not sure

jrus (me@jacobrus.com)
2018-09-13 08:57:57

one of the nice things about coffeescript was it compiled down to mostly bare for loops which are blazing

jrus (me@jacobrus.com)
2018-09-13 08:58:44

all the map and foreach and for-of loops and ... are slower

jrus (me@jacobrus.com)
2018-09-13 08:59:01

also it compiled destructuring down to separate lines, etc.

jrus (me@jacobrus.com)
2018-09-13 08:59:06

also probably faster

jrus (me@jacobrus.com)
2018-09-13 08:59:48

@Scott anyway, I gotta go for a few hours

jrus (me@jacobrus.com)
2018-09-13 09:00:03

I don't mind classes

jrus (me@jacobrus.com)
2018-09-13 14:47:23

@Scott okay, after 5 hours of hard playing, simon is out

jrus (me@jacobrus.com)
2018-09-13 14:51:13

anything I should work on?

Scott (scott@vorthmann.org)
2018-09-13 15:10:02

Check Trello I guess... Sorry in a meeting. I did a little prioritizing there. See what you think

jrus (me@jacobrus.com)
2018-09-13 15:10:08

no rush

jrus (me@jacobrus.com)
2018-09-13 15:12:03

I'm going to see if I can figure out the half-integer red-strut coordinate system

jrus (me@jacobrus.com)
2018-09-13 15:13:56

I think there are some interesting symmetry operations you can do by swapping / reflecting some of the red strut directions

Scott (scott@vorthmann.org)
2018-09-13 15:14:56

Ok sounds fun

jrus (me@jacobrus.com)
2018-09-13 15:16:14

@Scott given any shape, there are 6! 2⁶ different versions you can get that way. but obviously many of those are isometric in 3-space

jrus (me@jacobrus.com)
2018-09-13 15:17:38

maybe 120 of each type?

jrus (me@jacobrus.com)
2018-09-13 15:19:15

I guess flipping all the signs at once also leaves the same shape

jrus (me@jacobrus.com)
2018-09-13 15:19:52

not sure if there are actually (potentially) 192 different versions or if it's less than that in the end

Scott (scott@vorthmann.org)
2018-09-13 15:21:05

Lost me, let's screen tonight. I want to understand

jrus (me@jacobrus.com)
2018-09-13 15:22:06

sure

jrus (me@jacobrus.com)
2018-09-13 15:23:06

@Scott I really like these different integer coordinate systems. e.g. using 3 integers (even non-negative if you want) to represent points on an equilateral triangle grid

Scott (scott@vorthmann.org)
2018-09-13 15:23:40

Barymetric?

jrus (me@jacobrus.com)
2018-09-13 15:23:49

in that one we have the property that (1, 1, 1) = 0

Scott (scott@vorthmann.org)
2018-09-13 15:23:49

Is that the term?

jrus (me@jacobrus.com)
2018-09-13 15:24:12

barycentric coordinates are related but different

jrus (me@jacobrus.com)
2018-09-13 15:24:35

barycentric coordinates are relative to any arbitrary triangle in any affine space

jrus (me@jacobrus.com)
2018-09-13 15:24:50

I'm talking about a lattice

jrus (me@jacobrus.com)
2018-09-13 15:25:04

in barycentric coordinates, the sum of the coordinates is always 1

jrus (me@jacobrus.com)
2018-09-13 15:36:52

@Scott interestingly, if you pick any set of 6 non-collinear (out of 12) red directions, and then starting from an arbitrary point you travel along every possible permutation of those vectors, you always make this same 6-cube shape (and you always end up reflected across the origin from where you started, along either a red or yellow direction)

jrus (me@jacobrus.com)
2018-09-13 15:37:15

I should say, reflected across the center of the shape

jrus (me@jacobrus.com)
2018-09-13 15:39:21

every one of the 2^6 choices of signs has either 3-fold or 5-fold symmetry

jrus (me@jacobrus.com)
2018-09-13 15:40:01

there are 2 different types (with 20 each) with 3-fold symmetry, plus 2 different types (12 each) with 5-fold symmetry

jrus (me@jacobrus.com)
2018-09-13 15:41:31

I'm sorta curious what good literature there is out there about this kind of thing, that isn't too inaccessible. once you have code up for drawing these things, it should be possible to make a whole bunch of little exploratory tools

jrus (me@jacobrus.com)
2018-09-13 15:41:56

each can be its own notebook or whatever; there's a bit more freedom than a desktop app, because you don't need to worry about cluttering up the UI

jrus (me@jacobrus.com)
2018-09-13 15:42:15

and you can put inline explanations etc.

jrus (me@jacobrus.com)
2018-09-13 15:44:04

uh oh. zometool website:

"Down for Maintenance

Sorry, we are not taking new orders at the moment. Our production equipment is currently down for upgrades and maintenance. Please check back soon. Thank you. - Zometool Inc"

jrus (me@jacobrus.com)
2018-09-13 15:44:25

it's crazy that they have their whole site down

jrus (me@jacobrus.com)
2018-09-13 15:44:28

I wonder what the story is

jrus (me@jacobrus.com)
2018-09-13 16:00:26

@Scott I have one thing it might be useful to 3d print: "caps", that just extend a strut to the length of the middle of the node. i.e. half a bob, maybe with a closed end

Scott (scott@vorthmann.org)
2018-09-13 16:18:02

They may be having a production tooling problem... But they would not shut down the website for that

Scott (scott@vorthmann.org)
2018-09-13 16:20:45

Caps are an interesting idea... More satisfying and informative for a free strut end

Scott (scott@vorthmann.org)
2018-09-13 16:21:35

I might taper them to meet in a friendly way

Scott (scott@vorthmann.org)
2018-09-13 16:22:33

Though that is the 1% use case... Usually you would want a ball if they meet

Scott (scott@vorthmann.org)
2018-09-13 16:23:41

Heck, in 10 minutes I can model both options, and let the user decide

Scott (scott@vorthmann.org)
2018-09-13 16:27:18

Oh I should have read further... It is the equipment. I remember seeing something on their slack channel

Scott (scott@vorthmann.org)
2018-09-13 16:34:07

Both ball machines were down for a time in May. Sounds like one had been unreliable already. They may still be limping

jrus (me@jacobrus.com)
2018-09-13 16:43:31

@Scott uh oh

jrus (me@jacobrus.com)
2018-09-13 16:43:36

any way to help out from outside?

Scott (scott@vorthmann.org)
2018-09-13 16:44:00

Lots of money? 😁

Scott (scott@vorthmann.org)
2018-09-13 16:44:18

I'm only guessing, that was a while ago

jrus (me@jacobrus.com)
2018-09-13 16:44:20

not sure what counts as "lots"

jrus (me@jacobrus.com)
2018-09-13 16:44:39

I would be happy to throw them a few hundred bucks but I doubt it would solve anything serious

Scott (scott@vorthmann.org)
2018-09-13 16:45:08

Around $8000 for a new CPU card was what they needed in May apparently

jrus (me@jacobrus.com)
2018-09-13 16:45:48

it's really too bad that schools spend so much money on computers etc., instead of other kinds of materials

Scott (scott@vorthmann.org)
2018-09-13 16:45:49

Crowd funded that is a trivial amount

jrus (me@jacobrus.com)
2018-09-13 16:46:02

the money would go much further

jrus (me@jacobrus.com)
2018-09-13 16:49:22

@Scott huh, according to https://en.wikipedia.org/wiki/Quasicrystal sometimes the projected 6-cube (i.e. red strut coordinate system) is used for working with quasicrystals

} Wikipedia (https://en.wikipedia.org/)
jrus (me@jacobrus.com)
2018-09-13 16:49:35

I wonder if there's a good summary paper

Scott (scott@vorthmann.org)
2018-09-13 16:50:43

That's pretty cool. Good luck finding something at a general level

jrus (me@jacobrus.com)
2018-09-13 16:51:26

I just physically made (a isometric representative of) all of the possible vectors producible from red struts

jrus (me@jacobrus.com)
2018-09-13 16:51:31

there are 12 types in all

jrus (me@jacobrus.com)
2018-09-13 16:51:43

4 each in the red, yellow, and blue directions

Scott (scott@vorthmann.org)
2018-09-13 16:53:50

Closed under blue and red... So probably under Yellow too

jrus (me@jacobrus.com)
2018-09-13 16:54:04

it needs to be half-blues or half-reds

Scott (scott@vorthmann.org)
2018-09-13 16:54:22

Ah

jrus (me@jacobrus.com)
2018-09-13 16:54:23

at least, if you want to use 3 orthogonal blue directions + their phi-multiples

Scott (scott@vorthmann.org)
2018-09-13 16:54:34

Yes

jrus (me@jacobrus.com)
2018-09-13 16:54:35

or if you want to use integer multiples of the red unit

jrus (me@jacobrus.com)
2018-09-13 16:54:56

you can get any blue strut from integer multiples of unit reds

jrus (me@jacobrus.com)
2018-09-13 16:55:04

so if you want half-blues you need to use half-reds

jrus (me@jacobrus.com)
2018-09-13 16:55:25

and then from there we already know how to get everything we wanted from half-blues

jrus (me@jacobrus.com)
2018-09-13 16:59:48

@Scott I wonder where a good place to start is .... https://scholar.google.com/scholar?cites=10544558457029523701

jrus (me@jacobrus.com)
2018-09-13 17:00:25

seems like there is a lot of literature

jrus (me@jacobrus.com)
2018-09-13 18:02:55

okay just bought this other super-old ebay zometool kit https://www.ebay.com/itm/372435621263?nordt=true&orig_cvip=true

eBay
jrus (me@jacobrus.com)
2018-09-13 18:03:25

pretty sure I've never seen that version of the manual

jrus (me@jacobrus.com)
2018-09-13 19:36:27

@Scott the big question with a red-strut coordinate system is if we need 2 different types, should there be 3 of each, or 1 of one and 5 of the other.

jrus (me@jacobrus.com)
2018-09-13 19:37:02

it works out the same either way, but changes a bit the way to think about it

jrus (me@jacobrus.com)
2018-09-13 19:37:48

or I guess they can be 6 symmetrical ones thought of in an orthogonal blue coordinate system

jrus (me@jacobrus.com)
2018-09-13 19:40:31

I guess they can either be 12 symmetrical ones

jrus (me@jacobrus.com)
2018-09-13 19:40:45

or 6 broken into types

jrus (me@jacobrus.com)
2018-09-13 19:46:13

most logical w/r/t a blue coordinate system is probably to have the directions (1, φ⁻, 0), (0, 1, φ⁻), (φ⁻, 0, 1) be one type, and the directions (1, –φ⁻, 0), (0, 1, –φ⁻), (–φ⁻, 0, 1) be the other type

Scott (scott@vorthmann.org)
2018-09-13 19:50:31

hey, just got back from Lia's match

Scott (scott@vorthmann.org)
2018-09-13 19:51:57

wow, that is some old Zome

Scott (scott@vorthmann.org)
2018-09-13 19:52:08

gotta eat

Scott (scott@vorthmann.org)
2018-09-13 19:57:51

I would place a bet on a good book from Marjorie Seneschal

jrus (me@jacobrus.com)
2018-09-13 20:00:12

yeah

jrus (me@jacobrus.com)
2018-09-13 20:00:15

there definitely is one

jrus (me@jacobrus.com)
2018-09-13 20:00:39

I'm not sure what is covered

jrus (me@jacobrus.com)
2018-09-13 20:06:19

I should figure out what the normalized orbit numbers look like under gnomonic projection onto a yellow plane, when we use barycentric coordinates with red struts at the corners (or similar)

Scott (scott@vorthmann.org)
2018-09-13 20:08:08

would the barycentric coordinates necessarily be floats?

Scott (scott@vorthmann.org)
2018-09-13 20:09:01

hey, want to talk about Observable vZome on Sept 29 at Stan's house?

jrus (me@jacobrus.com)
2018-09-13 20:23:22

sure

jrus (me@jacobrus.com)
2018-09-13 20:23:40

@Scott I can show you a bunch of physical models if you want to video chat :P

Scott (scott@vorthmann.org)
2018-09-13 20:30:27

we can try... Derek is being noisy

Scott (scott@vorthmann.org)
2018-09-13 20:30:53

phone is low, plugged in... join.me?

jrus (me@jacobrus.com)
2018-09-13 20:32:07

or not, just you might be curious

jrus (me@jacobrus.com)
2018-09-13 20:32:15

I don't think join.me does webcam view?

Scott (scott@vorthmann.org)
2018-09-13 20:32:16

yes, I am

Scott (scott@vorthmann.org)
2018-09-13 20:32:31

I'll get the phone

jrus (me@jacobrus.com)
2018-09-13 20:32:36

but slack might?

jrus (me@jacobrus.com)
2018-09-13 20:33:02

oh I see only on paid plan

jrus (me@jacobrus.com)
2018-09-13 20:59:47

@Scott oh, I realized I should probably remove struts with zero displacement in my code from yesterday

Scott (scott@vorthmann.org)
2018-09-13 21:00:11

good idea... didn't hurt you much

Scott (scott@vorthmann.org)
2018-09-13 21:00:19

oh, I haven't checked out the perf yet

jrus (me@jacobrus.com)
2018-09-13 21:00:29

I think we'll get some divide by zero stuff otherwise

jrus (me@jacobrus.com)
2018-09-13 21:00:39

no idea what 'orbit2' throws up for zero vector

jrus (me@jacobrus.com)
2018-09-13 21:00:46

I should probably special case it there too

jrus (me@jacobrus.com)
2018-09-13 21:01:19

not sure what it should return, frankly

Scott (scott@vorthmann.org)
2018-09-13 21:01:23

much better perf!

Scott (scott@vorthmann.org)
2018-09-13 21:02:02

a zero somewhere we could recognize in resolveSegments

Scott (scott@vorthmann.org)
2018-09-13 21:02:04

later

jrus (me@jacobrus.com)
2018-09-13 21:02:16

yes, it should be recognized in resolvesegments for sure

jrus (me@jacobrus.com)
2018-09-13 21:02:25

cheers

jrus (me@jacobrus.com)
2018-09-13 21:03:26

@Scott would be fun to test performance of making a super complicated model and finding enough info to render it in browser vs. vzome 😈

jrus (me@jacobrus.com)
2018-09-13 21:06:32

@Scott oh nice. orbit2 just spits out that 0,0 is a blue-orbit strut with zero length

jrus (me@jacobrus.com)
2018-09-13 21:06:35

that's easy to check

Scott (scott@vorthmann.org)
2018-09-13 21:07:12

Yes

Scott (scott@vorthmann.org)
2018-09-13 21:09:04

You mean compare the performance of resolve in web vs vZome. Web would win. 😁. Question is, how much

jrus (me@jacobrus.com)
2018-09-13 21:10:02

```resolveSegments = { class IndexedSet { constructor() { this.contents = []; this.map = new Map; } add(item) { const itemhash = JSON.stringify(item); let index = this.map.get(itemhash); if (index == null) { index = this.contents.length; this.contents.push(item); this.map.set(itemhash, index); } return index; } }

return function resolveSegments( segments ) { const scale = [2,3,1]; // phi cubed const vertices = new IndexedSet, quaternions = new IndexedSet, balls = new IndexedSet, struts = new IndexedSet, strutdata = [];

for (let segment of segments) {
  const startpoint = scalarmul(scale, segment[0]);
  const endpoint = scalarmul(scale, segment[1]);
  const startindex = vertices.add(startpoint);
  const endindex = vertices.add(endpoint);
  balls.add(startindex), balls.add(endindex);
  if (startindex != endindex) struts.add([startindex,endindex].sort());
}

for (let [startindex, endindex] of struts.contents) {
  const startpoint = vertices.contents[startindex];
  const endpoint = vertices.contents[endindex];
  const displacement = vectorsub(endpoint, startpoint);
  const [orbit, quaternion, reflected, length] = orbit2(displacement);
  const quatindex = quaternions.add(quaternion);
  strutdata.push({
    orbit: JSON.stringify(orbit), orientation: quatindex,
    start: reflected ? endindex : startindex, length: length });
}

return {
  vertices: vertices.contents, balls: balls.contents,
  quaternions: quaternions.contents, struts: strutdata };

} }```

jrus (me@jacobrus.com)
2018-09-13 21:10:21

okay added a if (startindex != endindex) before adding a strut

jrus (me@jacobrus.com)
2018-09-13 21:11:10

that should handle it, since each vertex (by position) is only allowed once in the IndexedSet

jrus (me@jacobrus.com)
2018-09-13 21:21:58

@Scott it would be fun to have a "project the view from the current camera onto half a sphere" view

Scott (scott@vorthmann.org)
2018-09-13 21:22:47

Trying to picture that

jrus (me@jacobrus.com)
2018-09-13 21:22:48

then you could look at it from outside

jrus (me@jacobrus.com)
2018-09-13 21:23:00

maybe project onto a whole sphere

jrus (me@jacobrus.com)
2018-09-13 21:23:07

spin the sphere around etc.

jrus (me@jacobrus.com)
2018-09-13 21:23:51

shit, I need to get my act together with doing better map reprojection in webgl

jrus (me@jacobrus.com)
2018-09-13 21:24:34

personally I think the right format for this is something based on the octahedron. can use a power-of-2 side square texture

Scott (scott@vorthmann.org)
2018-09-13 21:24:36

Lol. You have a long list

jrus (me@jacobrus.com)
2018-09-13 21:24:52

and then each pixel is logically hexagonal

jrus (me@jacobrus.com)
2018-09-13 21:25:13

which means to do antialiasing ideally you want to look in a hexagonal neighborhood

jrus (me@jacobrus.com)
2018-09-13 21:25:24

which means you don't want to just use naive existing resampling code

jrus (me@jacobrus.com)
2018-09-13 21:26:28

@Scott the first hangup here is that I want to figure out the right metric to judge distance errors on a map, and then optimize for that metric for a map from equilateral triangle <-> octant

jrus (me@jacobrus.com)
2018-09-13 21:27:02

all the existing metrics for judging map quality are subpar I think

jrus (me@jacobrus.com)
2018-09-13 21:27:54

if I can develop better criteria I can later use it to optimize maps of countries, continents, etc. etc.

jrus (me@jacobrus.com)
2018-09-13 21:28:21

but to start I want to have an octant <-> triangle map, as it is useful directly for several other projects

jrus (me@jacobrus.com)
2018-09-13 21:29:20

there are then 4 obvious choices of projections from octant -> triangle: gnomonic, conformal, distance-error-optimizing, and distance-error-optimizing while preserving area

jrus (me@jacobrus.com)
2018-09-13 21:29:30

which have various uses

jrus (me@jacobrus.com)
2018-09-13 21:30:26

that map lets me make a nice grid (and set of points, etc.) on the octant, so that I can optimize other maps from the octant -> flat paper

jrus (me@jacobrus.com)
2018-09-13 21:30:53

but also I can use it to define pixel positions for a raster image on the sphere

Scott (scott@vorthmann.org)
2018-09-13 21:31:14

I see. Feel free to work on whatever floats your boat! We have good momentum; I'm not worried

jrus (me@jacobrus.com)
2018-09-13 21:31:27

oh, this is much bigger projects

jrus (me@jacobrus.com)
2018-09-13 21:31:44

with unsolved research problems

jrus (me@jacobrus.com)
2018-09-13 21:31:51

might take months of thought etc.

jrus (me@jacobrus.com)
2018-09-13 21:35:57

@Scott I'm looking at this red projective thingy again. I need to figure out how it's related to https://en.wikipedia.org/wiki/Fano_plane

} Wikipedia (https://en.wikipedia.org/)
jrus (me@jacobrus.com)
2018-09-13 21:36:12

it seems like we have 2 fano planes nested with corners connected

jrus (me@jacobrus.com)
2018-09-13 21:38:07

the "sum 3 red struts" orbits that aren't yellow ones per se must be important

jrus (me@jacobrus.com)
2018-09-13 21:45:49

lavender, olive

jrus (me@jacobrus.com)
2018-09-13 21:46:08

@Scott so lavender and olive are "alternate yellows" in the 6-cube coordinate system

jrus (me@jacobrus.com)
2018-09-13 21:47:00

which makes me sad that olive is a yucky type of color :P

Scott (scott@vorthmann.org)
2018-09-13 21:47:01

Curious

Scott (scott@vorthmann.org)
2018-09-13 21:48:21

So we could define a different coloring scheme... A good feature anyway

jrus (me@jacobrus.com)
2018-09-13 21:48:23

how do you think of those two?

Scott (scott@vorthmann.org)
2018-09-13 21:48:53

I would expect maroon to make an appearance too

jrus (me@jacobrus.com)
2018-09-13 21:49:38

okay I have to walk ernie. bb30

Scott (scott@vorthmann.org)
2018-09-13 21:50:07

Those 3 seem to usually come together. I think of them as arising when we map some fivefold symmetry to octahedral

Scott (scott@vorthmann.org)
2018-09-13 21:50:13

Later

jrus (me@jacobrus.com)
2018-09-13 21:50:17

I'm not actually sure if adding the three red struts with unit weight is the right thing

jrus (me@jacobrus.com)
2018-09-13 21:50:33

if I am looking for the "projective center" or whatever

jrus (me@jacobrus.com)
2018-09-13 21:51:20

what I actually want to do is connect lines between red corners and the blues at the centers of the opposite sides

jrus (me@jacobrus.com)
2018-09-13 21:51:35

and then see where those 3 lines intersect

jrus (me@jacobrus.com)
2018-09-13 21:51:49

that might turn out differently than lavender / olive

jrus (me@jacobrus.com)
2018-09-13 21:52:01

I'll figure it out when I get back

jrus (me@jacobrus.com)
2018-09-13 23:10:30

@Scott okay, what do we need to do projective geometry?

jrus (me@jacobrus.com)
2018-09-13 23:10:45

we need join, meet, etc.

jrus (me@jacobrus.com)
2018-09-13 23:13:00

we can represent both points and planes as 3-vectors, but potentially people can screw up and mix them

jrus (me@jacobrus.com)
2018-09-13 23:13:50

(points = homogeneous vectors, planes = homogeneous bivectors)

jrus (me@jacobrus.com)
2018-09-13 23:15:03

or maybe not normalized per se, but I mean 3-proportions representing a line pointed along a vector, 3-proportions representing a plane pointed along a bivector

Scott (scott@vorthmann.org)
2018-09-13 23:18:53

In my attempts to implement GA, I have gotten frustrated. It always seemed it would be a good fit with algebraic fields, and geometry based on them.

jrus (me@jacobrus.com)
2018-09-13 23:19:26

implementing full multivectors is easy enough I guess. the tricky part is what UI to expose to users

Scott (scott@vorthmann.org)
2018-09-13 23:19:47

I think I got discouraged when it became clear that the "magically intersect subspaces" operator turned out to require some special cases

jrus (me@jacobrus.com)
2018-09-13 23:20:15

I haven't even thought about what conformal GA looks like for zome

Scott (scott@vorthmann.org)
2018-09-13 23:20:39

I've thought a little, and it is really intriguing to think about... but I get a bit lost

jrus (me@jacobrus.com)
2018-09-13 23:20:39

should work okay in any field

Scott (scott@vorthmann.org)
2018-09-13 23:20:43

yes

Scott (scott@vorthmann.org)
2018-09-13 23:21:29

a sphere that is dense in S2, but has no continuity!

Scott (scott@vorthmann.org)
2018-09-13 23:21:50

Calculus class really ruined my ability to comprehend that

jrus (me@jacobrus.com)
2018-09-13 23:21:57

well and a lot of points that can't really be projected onto a sphere

Scott (scott@vorthmann.org)
2018-09-13 23:22:08

yes

jrus (me@jacobrus.com)
2018-09-13 23:22:11

that's the fun one

jrus (me@jacobrus.com)
2018-09-13 23:22:17

you can project arbitrary points onto planes

Scott (scott@vorthmann.org)
2018-09-13 23:22:31

but the idea of using algebraic fields to model hyperbolic geometry... that would be amazing

jrus (me@jacobrus.com)
2018-09-13 23:22:38

ah yeah

jrus (me@jacobrus.com)
2018-09-13 23:22:45

not sure how that works out

Scott (scott@vorthmann.org)
2018-09-13 23:22:50

nor am I

jrus (me@jacobrus.com)
2018-09-13 23:22:52

maybe you can use the heptagon stuff

Scott (scott@vorthmann.org)
2018-09-13 23:23:01

yes, tantalizing

jrus (me@jacobrus.com)
2018-09-13 23:23:16

@Scott did you see henry segerman's bridges talk/paper?

Scott (scott@vorthmann.org)
2018-09-13 23:23:35

part of the frustration with GA came from the disparities between the books

Scott (scott@vorthmann.org)
2018-09-13 23:23:58

I don't remember ... from Stockholm? probably not

jrus (me@jacobrus.com)
2018-09-13 23:24:05

https://www.youtube.com/watch?v=YpKWa8vrULk

YouTube
} Henry Segerman (https://www.youtube.com/user/henryseg)
Scott (scott@vorthmann.org)
2018-09-13 23:24:22

yes, I've seem some of that before, lots of his work with Roice

Scott (scott@vorthmann.org)
2018-09-13 23:24:26

you should meet Roice

jrus (me@jacobrus.com)
2018-09-13 23:24:38

check out the talk video, it's cool

Scott (scott@vorthmann.org)
2018-09-13 23:24:42

very unassuming, but hella math programmer

Scott (scott@vorthmann.org)
2018-09-13 23:24:45

will do

Scott (scott@vorthmann.org)
2018-09-13 23:25:55

I'm not sure how GA will help you do projective geometry... but I don't think I'm ready to learn that tonight

jrus (me@jacobrus.com)
2018-09-13 23:26:20

@Scott projective geometry is just the geometry of proportions

jrus (me@jacobrus.com)
2018-09-13 23:26:48

i.e. a🅱️c where we can multiply all 3 by an arbitrary (non-zero) scalar without changing the point

Scott (scott@vorthmann.org)
2018-09-13 23:27:01

ok, that helps

jrus (me@jacobrus.com)
2018-09-13 23:27:16

@Scott usually it gets drawn by normalizing one of the coordinates to 1

Scott (scott@vorthmann.org)
2018-09-13 23:27:41

sounds familiar

jrus (me@jacobrus.com)
2018-09-13 23:27:51

@Scott but you could also e.g. normalize it so that the sum of squares is 1

Scott (scott@vorthmann.org)
2018-09-13 23:28:01

a sphere

jrus (me@jacobrus.com)
2018-09-13 23:28:02

(assuming you can take square roots in your field)

jrus (me@jacobrus.com)
2018-09-13 23:28:59

@Scott anyway, you can often just work with the 3-proportions without normalizing them first

Scott (scott@vorthmann.org)
2018-09-13 23:29:06

ok

jrus (me@jacobrus.com)
2018-09-13 23:29:16

as long as you do it carefully

jrus (me@jacobrus.com)
2018-09-13 23:29:54

@Scott so to join 2 points is the same as joining 2 lines through the origin to get a plane

Scott (scott@vorthmann.org)
2018-09-13 23:30:12

right, I remember seeing that

jrus (me@jacobrus.com)
2018-09-13 23:30:19

to intersect two projective lines is the same as intersecting 2 planes through the origin to get a line

jrus (me@jacobrus.com)
2018-09-13 23:30:47

@Scott basically a lot of "cross products"

jrus (me@jacobrus.com)
2018-09-13 23:31:19

(except it's better to remember that vectors and bivectors are distinct types of objects)

Scott (scott@vorthmann.org)
2018-09-13 23:31:27

of course

Scott (scott@vorthmann.org)
2018-09-13 23:31:47

which GA book do you prefer, by the way?

Scott (scott@vorthmann.org)
2018-09-13 23:32:01

I have four... and not Hestenes

Scott (scott@vorthmann.org)
2018-09-13 23:32:45

GA4CS, GA4P, GA4CG, and an obscure one

Scott (scott@vorthmann.org)
2018-09-13 23:33:43

the last is my favorite... it is example-rich, and only 1/2 thick... heavy on pragmatics, light on theory, metrics, conformal model, etc.

Scott (scott@vorthmann.org)
2018-09-13 23:34:13

John Vince

Scott (scott@vorthmann.org)
2018-09-13 23:35:40

hey, Doran and Lasenby has a chapter section on projective geometry... I'll read that

jrus (me@jacobrus.com)
2018-09-13 23:36:40

@Scott I really need to dive in and work a lot more problems

jrus (me@jacobrus.com)
2018-09-13 23:36:56

I feel like I'm still missing some key geometric insight in the conformal model

Scott (scott@vorthmann.org)
2018-09-13 23:36:58

go for it, less slacking

jrus (me@jacobrus.com)
2018-09-13 23:37:14

that's the GA4CS book

jrus (me@jacobrus.com)
2018-09-13 23:37:31
Scott (scott@vorthmann.org)
2018-09-13 23:37:50

that one I loved at first... the first chapter offers a paradise, then the rest of it reveals all the ugly details and special cases

jrus (me@jacobrus.com)
2018-09-13 23:37:57

heh

Scott (scott@vorthmann.org)
2018-09-13 23:37:59

thank you

jrus (me@jacobrus.com)
2018-09-13 23:40:25

time to read a couple books with simon

Scott (scott@vorthmann.org)
2018-09-13 23:40:53

night

jrus (me@jacobrus.com)
2018-09-14 12:33:23

@Scott so I've been thinking about how to draw projections onto the plane / sphere

jrus (me@jacobrus.com)
2018-09-14 12:33:31

e.g. in 3d

Scott (scott@vorthmann.org)
2018-09-14 12:34:23

Ok. D3 or 3js?

jrus (me@jacobrus.com)
2018-09-14 12:34:26

3js

jrus (me@jacobrus.com)
2018-09-14 12:34:36

I think we can make a translucent sphere

Scott (scott@vorthmann.org)
2018-09-14 12:34:42

Easily

jrus (me@jacobrus.com)
2018-09-14 12:34:48

with flat ring-shaped "planes"

Scott (scott@vorthmann.org)
2018-09-14 12:34:56

Yup

jrus (me@jacobrus.com)
2018-09-14 12:34:57

i.e. that extend a bit on either side of the sphere

jrus (me@jacobrus.com)
2018-09-14 12:35:05

or maybe just the outside, dunno

jrus (me@jacobrus.com)
2018-09-14 12:35:42

and then for "points" we can draw a section of a cone about the point (that would extend through the origin)

Scott (scott@vorthmann.org)
2018-09-14 12:35:45

Suddenly had a vision of Tron lightcycles

jrus (me@jacobrus.com)
2018-09-14 12:36:21

henry segerman (and many others) show the way the stereographic projection distorts size by making lines on the plane as if they came from uniform width lines on the sphere

Scott (scott@vorthmann.org)
2018-09-14 12:36:31

Yes

jrus (me@jacobrus.com)
2018-09-14 12:37:59

but I think we can make something cooler looking by taking our flat rings (from above) and applying the same sphere inversion that would take the sphere to the plane

jrus (me@jacobrus.com)
2018-09-14 12:38:26

so they will end up extending further out of the plane where other people's lines would be thicker

jrus (me@jacobrus.com)
2018-09-14 12:38:33

but still flat in our picture

Scott (scott@vorthmann.org)
2018-09-14 12:38:50

Like the"sky" sphere background?

jrus (me@jacobrus.com)
2018-09-14 12:39:05

sky sphere background?

Scott (scott@vorthmann.org)
2018-09-14 12:40:18

3js let's you define an equiangular projection as your background image... Like what you see in sketchfab

jrus (me@jacobrus.com)
2018-09-14 12:40:48

no, no background image

Scott (scott@vorthmann.org)
2018-09-14 12:41:44

Just not understanding your sphere inversion

jrus (me@jacobrus.com)
2018-09-14 12:42:19

okay. so a stereographic projection is a slice through a sphere inversion

Scott (scott@vorthmann.org)
2018-09-14 12:42:38

Not a stereographic projection?

jrus (me@jacobrus.com)
2018-09-14 12:42:39

in the plane case, we can do it as a circle inversion

Scott (scott@vorthmann.org)
2018-09-14 12:42:41

Oh

jrus (me@jacobrus.com)
2018-09-14 12:43:16

so imagine we have the circle x^2 + y^2 = x, and we do a circle inversion through the unit circle

jrus (me@jacobrus.com)
2018-09-14 12:43:21

we get the line x = 1

Scott (scott@vorthmann.org)
2018-09-14 12:43:50

Got it mostly

jrus (me@jacobrus.com)
2018-09-14 12:43:51

x^2 + y^2 = x is the "core circle" which has a diameter from (0,0) to (1,0)

jrus (me@jacobrus.com)
2018-09-14 12:44:17

so if you invert in the unit circle, the point at (0,0) goes to infinity

Scott (scott@vorthmann.org)
2018-09-14 12:44:24

Yes

jrus (me@jacobrus.com)
2018-09-14 12:44:31

and the other points get projected onto the line x=1

jrus (me@jacobrus.com)
2018-09-14 12:44:33

anyway

jrus (me@jacobrus.com)
2018-09-14 12:44:45

if you have arbitrary other points in the plane, you can do the same inversion on them

jrus (me@jacobrus.com)
2018-09-14 12:44:52

they will not get mapped onto that line

Scott (scott@vorthmann.org)
2018-09-14 12:44:53

Ok

jrus (me@jacobrus.com)
2018-09-14 12:45:08

now imagine we draw little orthogonal tickmarks representing some points on the circle

Scott (scott@vorthmann.org)
2018-09-14 12:45:18

Yes

jrus (me@jacobrus.com)
2018-09-14 12:45:33

when we invert those in the circle, we get tick marks (at various angles and lengths) across the line

jrus (me@jacobrus.com)
2018-09-14 12:45:44

invert across the unit circle

Scott (scott@vorthmann.org)
2018-09-14 12:46:04

Right, now the same but in 3d, right?

jrus (me@jacobrus.com)
2018-09-14 12:46:08

exactly

Scott (scott@vorthmann.org)
2018-09-14 12:46:30

I want to do it just to see it

jrus (me@jacobrus.com)
2018-09-14 12:46:52

not quite sure how to do a similar thing for gnomonic projection

jrus (me@jacobrus.com)
2018-09-14 12:47:19

but I think that can also be done somehow

jrus (me@jacobrus.com)
2018-09-14 12:49:30

can obviously also just draw lines in the plane with svg. which might be clearer for general-purpose use. but I think the 3d version may be helpful for getting the initial idea across

jrus (me@jacobrus.com)
2018-09-14 13:03:05

@Scott anyway, I think we can just make one prototype 3js geometry thingy for the "planes" intersecting the sphere

jrus (me@jacobrus.com)
2018-09-14 13:03:21

and then rotate it the appropriate way

jrus (me@jacobrus.com)
2018-09-14 13:04:03

we can just make it a 200-sided polygon or something. not sure how many parts it needs to look plausibly circular

Scott (scott@vorthmann.org)
2018-09-14 19:10:10

https://beta.observablehq.com/d/3981794cbbb9e5e8

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-14 19:14:37

The ring axis is Z

Scott (scott@vorthmann.org)
2018-09-14 19:21:50

reshared... now with sphere and lighting

Scott (scott@vorthmann.org)
2018-09-14 19:26:14

now translucent

Scott (scott@vorthmann.org)
2018-09-14 19:32:45

now with blue rings

Scott (scott@vorthmann.org)
2018-09-14 19:33:00

@jrus a starting point for you

Scott (scott@vorthmann.org)
2018-09-14 19:37:16

It is fun to make the walls disappear... initially you see a rhombus. Make a pentagon or triangle.

jrus (me@jacobrus.com)
2018-09-14 20:17:33

@Scott I don't quite get why they triangulate it that way

jrus (me@jacobrus.com)
2018-09-14 20:18:08

@Scott your demois great

jrus (me@jacobrus.com)
2018-09-14 20:19:05

gotta fix the lighting / sphere color though

jrus (me@jacobrus.com)
2018-09-14 20:21:36

@Scott I wonder if some shadow cast from rings -> sphere would help with the disappearing walls

jrus (me@jacobrus.com)
2018-09-14 20:22:09

@Scott does 3js support arbitrary vertex shaders?

jrus (me@jacobrus.com)
2018-09-14 20:22:41

inverting arbitrary geometry in a sphere should be trivial there

Scott (scott@vorthmann.org)
2018-09-14 20:24:35

Yes I think we can set up any shader

Scott (scott@vorthmann.org)
2018-09-14 21:04:19

I think just adding a great circle line for each ring might be nice

Scott (scott@vorthmann.org)
2018-09-14 21:04:52

or just give the rings some thickness, maybe a slight taper

jrus (me@jacobrus.com)
2018-09-14 21:47:32

@Scott a touch of thicness might be good

jrus (me@jacobrus.com)
2018-09-14 21:47:54

I think different lighting and shadows would also help

Scott (scott@vorthmann.org)
2018-09-14 21:48:26

I don't know how to do shadows... lighting is easy to play with of course

Scott (scott@vorthmann.org)
2018-09-14 21:49:15

we could also just do away with lighting... try it with MeshBasicMaterial

Scott (scott@vorthmann.org)
2018-09-14 21:49:38

but then the width of the rings may get hard to understand

Scott (scott@vorthmann.org)
2018-09-14 21:50:56

I think the lighting would be OK, if it stayed fixed... the trackball rotated the object not the camera

Scott (scott@vorthmann.org)
2018-09-14 21:51:19

I want to figure out how to do that

jrus (me@jacobrus.com)
2018-09-14 21:51:52

needs some lighting for sure

jrus (me@jacobrus.com)
2018-09-14 21:52:41

I think needs more ambient light, more light overall, more neutral lighting

Scott (scott@vorthmann.org)
2018-09-14 21:53:43

go for it... I'm going to research object rotation

Scott (scott@vorthmann.org)
2018-09-14 21:54:17

can't be hard... the trackball should be doing nothing but setting a quaternion on its object, but it didn't work when I switched it from the camera to the mesh group

Scott (scott@vorthmann.org)
2018-09-14 22:01:24

I'm not attached to this notebook... consider your fork to be the master

Scott (scott@vorthmann.org)
2018-09-14 22:04:42

So easy! reshared

Scott (scott@vorthmann.org)
2018-09-14 22:04:52

lights are attached to the camera, the camera is added to the scene

Scott (scott@vorthmann.org)
2018-09-14 22:05:13

now going to fix vZomeRenderer

jrus (me@jacobrus.com)
2018-09-14 22:05:15

cool

jrus (me@jacobrus.com)
2018-09-14 22:05:21

now just need to have lighting from the top :)

jrus (me@jacobrus.com)
2018-09-14 22:06:28

@Scott change rotate speed to like 5+

Scott (scott@vorthmann.org)
2018-09-14 22:09:32

ok

Scott (scott@vorthmann.org)
2018-09-14 22:13:25

try now

Scott (scott@vorthmann.org)
2018-09-14 22:13:26

reshared

Scott (scott@vorthmann.org)
2018-09-14 22:17:57

published again: https://beta.observablehq.com/@vorth/wip-observable-vzome

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-14 22:18:56

I am much happier @jrus

jrus (me@jacobrus.com)
2018-09-14 22:19:46

@Scott at long last yao is home (for the past 30m or so) and settled in with simon, so I can try to do something useful

Scott (scott@vorthmann.org)
2018-09-14 22:20:08

cool

jrus (me@jacobrus.com)
2018-09-14 22:20:20

happier just with the lighting?

Scott (scott@vorthmann.org)
2018-09-14 22:20:40

and the fact that it sticks to the camera... so finally have the vZome approach

Scott (scott@vorthmann.org)
2018-09-14 22:20:51

please feel free to tune the lighting

Scott (scott@vorthmann.org)
2018-09-14 22:21:15

I have it slightly different in vZomeRenderer than in the ring demo... seemed too bright for the former

Scott (scott@vorthmann.org)
2018-09-14 22:22:42

Odd, I always thought my approach in vZome was backwards... the hard way to rotate the object under the lights and camera. This is clearly the preferred approach in 3js

Scott (scott@vorthmann.org)
2018-09-14 22:24:44

@jrus if you want to add some shape to the rings, you could play with LatheGeometry

Scott (scott@vorthmann.org)
2018-09-14 22:25:13

these geom examples have a control panel you can toggle open to play with the params

jrus (me@jacobrus.com)
2018-09-14 22:26:43

@Scott we could also just make our own mesh

jrus (me@jacobrus.com)
2018-09-14 22:26:51

it can't be that hard here

jrus (me@jacobrus.com)
2018-09-14 22:27:31

certainly a lot easier than zome struts

jrus (me@jacobrus.com)
2018-09-14 22:28:05

@Scott one thing we could do is add a pale/translucent stripe on the sphere on either side of the wall

Scott (scott@vorthmann.org)
2018-09-14 22:28:30

sure

jrus (me@jacobrus.com)
2018-09-14 22:29:04

btw, the rotation is super jittery and unreliable

Scott (scott@vorthmann.org)
2018-09-14 22:29:06

of course we can do our own Geom... just was looking for shortcuts

jrus (me@jacobrus.com)
2018-09-14 22:29:24

if you move the mouse some distance and then back the other way

Scott (scott@vorthmann.org)
2018-09-14 22:29:25

the LatheGeometry is pretty close, with just a V-shaped profile input

jrus (me@jacobrus.com)
2018-09-14 22:29:27

it doesn't return

jrus (me@jacobrus.com)
2018-09-14 22:29:47

I don't know if it's just dropping some mouse events or what

Scott (scott@vorthmann.org)
2018-09-14 22:29:55

that could be still the listener going on and off as you cross canvases

jrus (me@jacobrus.com)
2018-09-14 22:30:00

no

jrus (me@jacobrus.com)
2018-09-14 22:30:58

in general mouse handling in browsers sucks so much

Scott (scott@vorthmann.org)
2018-09-14 22:30:59

I don't think debugging that is a good use of our time, honestly... better to wait until you have your d3-drag replacement

jrus (me@jacobrus.com)
2018-09-14 22:31:21

there's e.g. no high precision raw mouse reading

Scott (scott@vorthmann.org)
2018-09-14 22:31:36

seems pretty smooth to me... could be your mouse? Your browser?

jrus (me@jacobrus.com)
2018-09-14 22:31:37

either from the device or even from pixels on retina screens

Scott (scott@vorthmann.org)
2018-09-14 22:31:42

chrome is doing nicely

jrus (me@jacobrus.com)
2018-09-14 22:32:13

oh weird

jrus (me@jacobrus.com)
2018-09-14 22:32:31

in safari it rotates much less than chrome

Scott (scott@vorthmann.org)
2018-09-14 22:32:52

I won't nag 😉

Scott (scott@vorthmann.org)
2018-09-14 22:32:59

Chrome always leads in support

jrus (me@jacobrus.com)
2018-09-14 22:33:13

nah, this seems likely to be a bug in the code

jrus (me@jacobrus.com)
2018-09-14 22:33:29

Chrome is way behind in some things, off on a limb on others

Scott (scott@vorthmann.org)
2018-09-14 22:33:38

well, I mean the Chrome devs are just better... so fewer bugs

jrus (me@jacobrus.com)
2018-09-14 22:33:44

lolwut

jrus (me@jacobrus.com)
2018-09-14 22:33:47

google just has different priorities than mozilla or apple

jrus (me@jacobrus.com)
2018-09-14 22:34:04

chrome is the biggest resource hog. won't even run under my typical workload

Scott (scott@vorthmann.org)
2018-09-14 22:34:09

sure.

jrus (me@jacobrus.com)
2018-09-14 22:34:11

just rolls over and dies

Scott (scott@vorthmann.org)
2018-09-14 22:34:24

but I've told you how to deal with that 😛

jrus (me@jacobrus.com)
2018-09-14 22:34:39

for the longest time chrome's svg and other graphics api implementations were buggy as hell

jrus (me@jacobrus.com)
2018-09-14 22:34:41

not sure about now

Scott (scott@vorthmann.org)
2018-09-14 22:34:50

remember I have like a 10-yr old CPU... and I'm happy

jrus (me@jacobrus.com)
2018-09-14 22:34:52

last I really dived in was a few years back

jrus (me@jacobrus.com)
2018-09-14 22:35:01

give firefox a try sometime :)

Scott (scott@vorthmann.org)
2018-09-14 22:35:14

when I was tracking the webGL support, they always seemed to lead.

Scott (scott@vorthmann.org)
2018-09-14 22:35:22

I will

jrus (me@jacobrus.com)
2018-09-14 22:35:23

I can believe that

jrus (me@jacobrus.com)
2018-09-14 22:35:34

apple didn't really care about webgl

jrus (me@jacobrus.com)
2018-09-14 22:36:46

@Scott anyway, that explains why I was super frustrated by the mouse stuff with TrackballControls; it's pretty bad in safari

Scott (scott@vorthmann.org)
2018-09-14 22:37:22

OK, glad to hear it was platform

Scott (scott@vorthmann.org)
2018-09-14 22:38:00

I wasn't sure at first when I saw them, but I'm warming up to your ring walls

Scott (scott@vorthmann.org)
2018-09-14 22:38:14

I might even object to enhancing them

Scott (scott@vorthmann.org)
2018-09-14 22:38:35

we need to render some red and yellow planes!

jrus (me@jacobrus.com)
2018-09-14 22:38:37

@Scott I think a 30% opacity perpendicular ring just above sphere surface would help

jrus (me@jacobrus.com)
2018-09-14 22:38:50

maybe

Scott (scott@vorthmann.org)
2018-09-14 22:38:55

let's try it...

jrus (me@jacobrus.com)
2018-09-14 22:39:06

(or something... needs fiddling to get details right)

Scott (scott@vorthmann.org)
2018-09-14 22:39:30

afk

jrus (me@jacobrus.com)
2018-09-14 22:39:41

cheers

Scott (scott@vorthmann.org)
2018-09-14 22:45:48

back

Scott (scott@vorthmann.org)
2018-09-14 22:45:51

Lia in bed

Scott (scott@vorthmann.org)
2018-09-14 22:46:04

we have a tournament tomorrow, starts at 8am

jrus (me@jacobrus.com)
2018-09-14 22:47:29

ooh

jrus (me@jacobrus.com)
2018-09-14 22:47:35

get some sleep :)

jrus (me@jacobrus.com)
2018-09-14 22:47:42

what position does she play?

Scott (scott@vorthmann.org)
2018-09-14 22:48:32

outside hitter.

Scott (scott@vorthmann.org)
2018-09-14 22:48:38

I won't be able to sleep for a while

jrus (me@jacobrus.com)
2018-09-14 22:48:40

nice. that's the fun one

Scott (scott@vorthmann.org)
2018-09-14 22:49:01

yes, and she doesn't sub out... one of the better passers/defenders/servers

Scott (scott@vorthmann.org)
2018-09-14 22:49:13

it'll be a fun day

Scott (scott@vorthmann.org)
2018-09-14 22:49:25

even some geometry 😉

jrus (me@jacobrus.com)
2018-09-14 22:49:47

do they run switch hitting plays at her level?

Scott (scott@vorthmann.org)
2018-09-14 22:50:05

no, not JV... not even really varsity, from what I've seen

jrus (me@jacobrus.com)
2018-09-14 22:50:14

i.e. the outside hitter goes across to the other side of the setter

Scott (scott@vorthmann.org)
2018-09-14 22:50:19

that would be only for the premier clubs... 16, 17, 18

jrus (me@jacobrus.com)
2018-09-14 22:50:31

that's probably more a high school varsity / beyond kind of thing

Scott (scott@vorthmann.org)
2018-09-14 22:50:36

crosses, stacks, D-balls, etc.

Scott (scott@vorthmann.org)
2018-09-14 22:50:39

pipes

Scott (scott@vorthmann.org)
2018-09-14 22:51:01

lots of tricks for boys varsity, but the girls don't seem to have the tools, at least at this school

jrus (me@jacobrus.com)
2018-09-14 22:51:12

seems fair

jrus (me@jacobrus.com)
2018-09-14 22:51:25

the girls net is so low. lots of fun :)

Scott (scott@vorthmann.org)
2018-09-14 22:51:28

Derek's team last year won NorCals... there is no state championship

jrus (me@jacobrus.com)
2018-09-14 22:51:41

oh really?

Scott (scott@vorthmann.org)
2018-09-14 22:51:43

and they beat the SoCal champs earlier in the year

jrus (me@jacobrus.com)
2018-09-14 22:51:57

wow, he must be pretty serious then

Scott (scott@vorthmann.org)
2018-09-14 22:52:00

yes, they're pretty stacked with talent

Scott (scott@vorthmann.org)
2018-09-14 22:52:09

well, he was... skipped club this year

Scott (scott@vorthmann.org)
2018-09-14 22:52:18

not clear he will go out for the school season

Scott (scott@vorthmann.org)
2018-09-14 22:52:41

he didn't get to play much, there are 12 seniors (!), and now about 8 juniors too

jrus (me@jacobrus.com)
2018-09-14 22:53:06

ah youch

Scott (scott@vorthmann.org)
2018-09-14 22:53:09

I hope he plays, but he'd rather spend all his time on video games

jrus (me@jacobrus.com)
2018-09-14 22:53:21

that's a very big team

Scott (scott@vorthmann.org)
2018-09-14 22:53:30

indeed

jrus (me@jacobrus.com)
2018-09-14 22:53:48

I didn't play varsity my junior year because I broke my leg in the winter and wasn't really recovered

Scott (scott@vorthmann.org)
2018-09-14 22:53:51

they only lost 5 seniors from last year, and only two were really starters

Scott (scott@vorthmann.org)
2018-09-14 22:54:02

they are expected to win it all again, or get close

jrus (me@jacobrus.com)
2018-09-14 22:54:02

and then didn't play at all my senior year because was out of the country then busy

Scott (scott@vorthmann.org)
2018-09-14 22:54:11

ouch

jrus (me@jacobrus.com)
2018-09-14 22:54:28

it was fun though

Scott (scott@vorthmann.org)
2018-09-14 22:54:31

did you play any club or college?

jrus (me@jacobrus.com)
2018-09-14 22:54:56

in college just intramural, i.e. joke games

jrus (me@jacobrus.com)
2018-09-14 22:54:57

but fun

Scott (scott@vorthmann.org)
2018-09-14 22:55:28

it is a good sport for life, I think... I played a lot of co-ed after grad school

jrus (me@jacobrus.com)
2018-09-14 22:55:33

nobody could pass, so it was hard to even get a good set

Scott (scott@vorthmann.org)
2018-09-14 22:55:40

that sux

jrus (me@jacobrus.com)
2018-09-14 22:56:08

but it was still fun, since nobody took it very seriously

jrus (me@jacobrus.com)
2018-09-14 22:56:13

good way to meet some people from the same dorm

Scott (scott@vorthmann.org)
2018-09-14 22:56:41

I'm going to try to tackle the mouse listener problem with trackball

jrus (me@jacobrus.com)
2018-09-14 22:56:49

I considered trying to walk on to the team, but I didn't really want to spend that kind of time on it

Scott (scott@vorthmann.org)
2018-09-14 22:56:52

it is the top two items on our "before publishing" list

jrus (me@jacobrus.com)
2018-09-14 22:57:08

I don't think it was that competitive at harvard, so I could have maybe gotten on

Scott (scott@vorthmann.org)
2018-09-14 22:57:13

yeah, it would be a big sink

jrus (me@jacobrus.com)
2018-09-14 22:58:23

maybe I should try to find some pick-up games / non-serious league in the city at some point

Scott (scott@vorthmann.org)
2018-09-14 22:59:42

OK, vZome 6.0 build 27 is available! http://vzome.com/home/index/vzome-60/

vzome.com
jrus (me@jacobrus.com)
2018-09-14 22:59:50

woo

Scott (scott@vorthmann.org)
2018-09-14 23:00:33

try the "copy.vson" command... remember the paste in Observable won't work for bigger models

Scott (scott@vorthmann.org)
2018-09-14 23:00:41

but works fine in gist

jrus (me@jacobrus.com)
2018-09-14 23:01:03

that one needs to be added in prefs?

Scott (scott@vorthmann.org)
2018-09-14 23:01:08

yes

Scott (scott@vorthmann.org)
2018-09-14 23:01:16

not prefs, in the custom menu file

Scott (scott@vorthmann.org)
2018-09-14 23:01:48

fair warning: I meant to do this already but forgot... going to add you to the acknowledgements in the about

jrus (me@jacobrus.com)
2018-09-14 23:02:00

no need. but okay :)

Scott (scott@vorthmann.org)
2018-09-14 23:02:02

probably even as a collaborator

jrus (me@jacobrus.com)
2018-09-14 23:02:14

I don't feel any need for public acclaim

Scott (scott@vorthmann.org)
2018-09-14 23:02:22

you've already had more significant and direct impact that some of those on the list

jrus (me@jacobrus.com)
2018-09-14 23:02:34

I feel like my role here is mostly to keep you going :)

Scott (scott@vorthmann.org)
2018-09-14 23:02:50

funny, I feel the same 😉

Scott (scott@vorthmann.org)
2018-09-14 23:04:06

in reverse, that is

Scott (scott@vorthmann.org)
2018-09-14 23:07:54

uh-oh... it should not be build 27, but build 37, I think

Scott (scott@vorthmann.org)
2018-09-14 23:26:31

lmao @jrus... http://www.smbc-comics.com/

smbc-comics.com
jrus (me@jacobrus.com)
2018-09-14 23:27:39

"more than 20"? amateurs

jrus (me@jacobrus.com)
2018-09-14 23:27:51

anything less than 100 is a joke

Scott (scott@vorthmann.org)
2018-09-14 23:29:59

ha

Scott (scott@vorthmann.org)
2018-09-14 23:30:19

hey, can you generate axes for red and yellow planes quickly?

Scott (scott@vorthmann.org)
2018-09-14 23:30:50

rather, quaternions that take the Z axis to those axes

jrus (me@jacobrus.com)
2018-09-14 23:31:01

what do you consider a "red" or "yellow" plane?

jrus (me@jacobrus.com)
2018-09-14 23:31:18

i.e. perpendicular to those struts?

Scott (scott@vorthmann.org)
2018-09-14 23:31:21

orthogonal to the red lines, etc.

Scott (scott@vorthmann.org)
2018-09-14 23:31:22

yes

Scott (scott@vorthmann.org)
2018-09-14 23:32:13

given symmetries, if you have quaternions that take X they will work with Z

jrus (me@jacobrus.com)
2018-09-14 23:33:14

they need a unit quaternion right?

jrus (me@jacobrus.com)
2018-09-14 23:34:35

the easy thing is just re-orient a blue strut onto the strut you want by dividing the vectors, then normalize to unit length, then take the square root

jrus (me@jacobrus.com)
2018-09-14 23:35:04

to get square root of a unit vector, add to <1,0,0,0> and then divide by the square root of length

jrus (me@jacobrus.com)
2018-09-14 23:35:42

I think I would make the default plane perpendicular to the x axis

jrus (me@jacobrus.com)
2018-09-14 23:36:00

but doesn't really matter too much of course

Scott (scott@vorthmann.org)
2018-09-14 23:37:35

yes, unit

jrus (me@jacobrus.com)
2018-09-14 23:37:55

square root of a rotation is conveniently just done by finding the midline of a parallelogram. this is the "half-angle formulas" in trig

jrus (me@jacobrus.com)
2018-09-14 23:38:28

or not just square root, but halfway interpolation of any arbitrary quaternions

jrus (me@jacobrus.com)
2018-09-14 23:38:41

one doesn't have to be the identity

jrus (me@jacobrus.com)
2018-09-14 23:39:05

I can draw a picture if that helps

Scott (scott@vorthmann.org)
2018-09-14 23:39:09

hrm... I was expecting this to be a one liner based on your existing notebook.

jrus (me@jacobrus.com)
2018-09-14 23:39:11

or just write some code out

jrus (me@jacobrus.com)
2018-09-14 23:39:39

you can't do it inside the golden rationals

Scott (scott@vorthmann.org)
2018-09-14 23:40:01

really? that's a bit surprising

Scott (scott@vorthmann.org)
2018-09-14 23:40:12

actually, no its not..

Scott (scott@vorthmann.org)
2018-09-14 23:40:19

blue doesn't map to yellow

Scott (scott@vorthmann.org)
2018-09-14 23:40:25

nor red

jrus (me@jacobrus.com)
2018-09-14 23:40:27

those combinations of rotation + scaling totally screw up the coordinates

Scott (scott@vorthmann.org)
2018-09-14 23:40:45

yes, of course... sorry, was being silly

jrus (me@jacobrus.com)
2018-09-14 23:40:46

if you don't need unit quaternion then maybe can be done

jrus (me@jacobrus.com)
2018-09-14 23:40:54

not sure about square roots

Scott (scott@vorthmann.org)
2018-09-14 23:41:14

I can always create a quick matrix

jrus (me@jacobrus.com)
2018-09-14 23:41:27

oh, you can definitely make a floating point quaternion without issue

Scott (scott@vorthmann.org)
2018-09-14 23:41:33

or use Euler angle <shudder>

Scott (scott@vorthmann.org)
2018-09-14 23:41:37

sure

jrus (me@jacobrus.com)
2018-09-14 23:42:02

so say you want to rotate (1, 0, 0) onto (1, 1, 1)

jrus (me@jacobrus.com)
2018-09-14 23:42:53

you do (0, 1, 1, 1) ** (0, 1, 0, 0) / 3

jrus (me@jacobrus.com)
2018-09-14 23:43:01

that gives you a quaternion which scales and rotates

jrus (me@jacobrus.com)
2018-09-14 23:43:14

er wait

jrus (me@jacobrus.com)
2018-09-14 23:43:21

I mean divide by 1 I guess

jrus (me@jacobrus.com)
2018-09-14 23:43:41

not 3 (that would be if you wanted to rotate and scale the other way)

jrus (me@jacobrus.com)
2018-09-14 23:44:03

now you find the magnitude of that thing (3) and divide by the square root

Scott (scott@vorthmann.org)
2018-09-14 23:44:43

divide by one? isn't that a no-op?

jrus (me@jacobrus.com)
2018-09-14 23:44:46

yes

jrus (me@jacobrus.com)
2018-09-14 23:45:04

in this case 1 is the squared magnitude of (1, 0, 0)

jrus (me@jacobrus.com)
2018-09-14 23:45:30

anyway, your result is (-1,0, 1, -1) / √3

jrus (me@jacobrus.com)
2018-09-14 23:45:35

now you add that thing to 1

jrus (me@jacobrus.com)
2018-09-14 23:45:48

and again divide by the square root of magnitude

jrus (me@jacobrus.com)
2018-09-14 23:47:33

in other words, take (1 – 1/√3, 0, 1/√3, –1/√3) and divide by √[ 1 + 1/3 – 2/√3 + 1/3 + 1/3 ] = √[2 – 2/√3]

jrus (me@jacobrus.com)
2018-09-14 23:48:35

you get nested square roots, but the actual algorithm part is easy to write floating point code for

jrus (me@jacobrus.com)
2018-09-14 23:48:53

@Scott it's more like a 3-liner than a 1-liner

Scott (scott@vorthmann.org)
2018-09-14 23:49:09

ok

Scott (scott@vorthmann.org)
2018-09-14 23:49:14

I'll try coding it

jrus (me@jacobrus.com)
2018-09-14 23:49:18

maybe even 5-liner if you want to be clear

Scott (scott@vorthmann.org)
2018-09-14 23:49:43

I only need one, I suppose... I can just apply the icosa quats to it

jrus (me@jacobrus.com)
2018-09-14 23:49:44

you can do the first steps in rational arithmetic

Scott (scott@vorthmann.org)
2018-09-14 23:50:01

thx... I think I'm too sleepy

Scott (scott@vorthmann.org)
2018-09-14 23:50:07

I'll catch you tomorrow

jrus (me@jacobrus.com)
2018-09-14 23:50:13

cheers, I might go sleep too

jrus (me@jacobrus.com)
2018-09-14 23:50:37

I think yao might take simon out tomorrow and give me a few hours of quiet time

jrus (me@jacobrus.com)
2018-09-14 23:53:19

@Scott 0.4597008433809830, 0, 0.6279630301995544, –0.6279630301995544,

jrus (me@jacobrus.com)
2018-09-14 23:53:34

there's the yellow one

jrus (me@jacobrus.com)
2018-09-14 23:55:59

@Scott wtf is this shit https://en.wikipedia.org/wiki/Rhombic_triacontahedron#/media/File:Rhombic_triacontahedron_box.stl

} Wikipedia (https://en.wikipedia.org/)
jrus (me@jacobrus.com)
2018-09-14 23:56:48

is it just my gpu or is this modeling thingy horribly broken?

Scott (scott@vorthmann.org)
2018-09-15 00:13:18

Shit for me too... Like a bad voxel rendering

jrus (me@jacobrus.com)
2018-09-15 00:25:17

I'll try to do something useful tomorrow

jrus (me@jacobrus.com)
2018-09-15 00:25:26

maybe dive in on mouse rotation experiments or something

jrus (me@jacobrus.com)
2018-09-15 00:27:57

@Scott I'm curious to hear your general thoughts about which planes are interesting

jrus (me@jacobrus.com)
2018-09-15 00:28:18

@Scott do you find use for all the planes perpendicular to any interesting strut direction?

jrus (me@jacobrus.com)
2018-09-15 00:28:34

or do you mostly construct planes via intersecting existing points?

jrus (me@jacobrus.com)
2018-09-15 00:29:22

e.g. the blue planes are just what you get if you start with 6 red points and intersect them

jrus (me@jacobrus.com)
2018-09-15 00:31:55

[no need for an answer soon. I'm going to sleep]

Scott (scott@vorthmann.org)
2018-09-15 08:12:51

I haven't done very much with the planes. It might be interesting to drag out planes instead of struts. I just color any panels according to the orbit of their normals.

Scott (scott@vorthmann.org)
2018-09-15 08:13:21

So yes, planes always arise from polygons

jrus (me@jacobrus.com)
2018-09-15 11:56:04

@Scott so there are two ways you might get new points. (1) take 4 points, find the line joining each pair, and then find the intersection

jrus (me@jacobrus.com)
2018-09-15 11:56:22

(2) take 2 points, join them, and then take the dual

jrus (me@jacobrus.com)
2018-09-15 11:57:43

if you go with the second method, you can basically consider points and lines (or vectors and planes) to be the same type of object. just repeatedly use the "cross product" between pairs to generate new elements

jrus (me@jacobrus.com)
2018-09-15 11:58:33

you can freely combine a point and a line, a line and a line, or a point and a point without worrying about the type, because they have the same (3-proportion) representation

jrus (me@jacobrus.com)
2018-09-15 11:59:22

@Scott I'm trying to think about how we could draw something like that 'zigzag' picture for zome orbits

jrus (me@jacobrus.com)
2018-09-15 12:00:45

and also how we could automatically generate a large list of orbits and order them by some heuristic representing how basic they are, so we can color them using some automatic method of generating colors

jrus (me@jacobrus.com)
2018-09-15 12:24:02

@Scott basically I'm not sure how generally important the orbits (vectors) are that arise from directly taking the dual of a join of existing vectors

jrus (me@jacobrus.com)
2018-09-15 12:24:35

I think we pretty quickly get a bunch that you don't have names for

jrus (me@jacobrus.com)
2018-09-15 12:24:41

in vzome

jrus (me@jacobrus.com)
2018-09-15 12:24:46

but they might not be that useful

Scott (scott@vorthmann.org)
2018-09-15 13:14:00

I'll have to understand this in terms of the icosahedron great circles/ planes. But not until later...

jrus (me@jacobrus.com)
2018-09-15 13:15:49

cheers

Scott (scott@vorthmann.org)
2018-09-15 19:14:58

@jrus still trying to understand the "dual of a join of vectors".

jrus (me@jacobrus.com)
2018-09-15 20:14:19

@Scott hey sorry, back

jrus (me@jacobrus.com)
2018-09-15 20:14:29

okay, a join of vectors is a bivector

jrus (me@jacobrus.com)
2018-09-15 20:14:32

the dual is a vector

jrus (me@jacobrus.com)
2018-09-15 20:14:45

dual of a join of vectors is just the cross product of the vectors

Scott (scott@vorthmann.org)
2018-09-15 20:15:41

right, which is how the new orbits usually arise in Zome space... red X blue => orange

Scott (scott@vorthmann.org)
2018-09-15 20:16:20

equivalently the planes orthogonal to red and blue intersect to form a line... which we call orange

Scott (scott@vorthmann.org)
2018-09-15 20:16:51

join is outer product? I thought there was more to it

jrus (me@jacobrus.com)
2018-09-15 20:17:43

@Scott the point is just that vectors and bivectors are conceptually different types

Scott (scott@vorthmann.org)
2018-09-15 20:17:51

yes I know that part

Scott (scott@vorthmann.org)
2018-09-15 20:17:58

happen to be duals in 3d

jrus (me@jacobrus.com)
2018-09-15 20:18:10

@Scott so you can also get new orbits by taking the join of two vectors, then taking the meet of two resulting bivectors

jrus (me@jacobrus.com)
2018-09-15 20:18:35

instead of taking the dual

Scott (scott@vorthmann.org)
2018-09-15 20:19:04

two bivectors result from the join?

Scott (scott@vorthmann.org)
2018-09-15 20:19:08

not just one?

jrus (me@jacobrus.com)
2018-09-15 20:19:27

you have a^b and c^d

jrus (me@jacobrus.com)
2018-09-15 20:19:52

you can then take the meet of those

Scott (scott@vorthmann.org)
2018-09-15 20:20:19

now a,b,c,d are points as vectors

jrus (me@jacobrus.com)
2018-09-15 20:20:25

right

jrus (me@jacobrus.com)
2018-09-15 20:20:35

so a^b and c^d are each bivectors

jrus (me@jacobrus.com)
2018-09-15 20:21:02

now you can multiply them and take the vector part of that

jrus (me@jacobrus.com)
2018-09-15 20:21:11

not sure what the best symbol is, maybe v

jrus (me@jacobrus.com)
2018-09-15 20:21:17

(downward wedge thing)

Scott (scott@vorthmann.org)
2018-09-15 20:22:06

leaving you with a vector e, another point

jrus (me@jacobrus.com)
2018-09-15 20:22:10

right

Scott (scott@vorthmann.org)
2018-09-15 20:23:38

make this concrete for me in terms of by red/blue/orange example

jrus (me@jacobrus.com)
2018-09-15 20:23:39

@Scott the point is just that if you do (a^bI)^cI = a x b x c, where I is the pseudoscalar, and ^ binds tighter than clifford product, then you are combining un-like objects / blurring the distinction between the types

Scott (scott@vorthmann.org)
2018-09-15 20:24:07

yes, the benefit of GA

jrus (me@jacobrus.com)
2018-09-15 20:24:12

you are treating "axial vectors" and "polar vectors" as the same

jrus (me@jacobrus.com)
2018-09-15 20:24:35

this is why I dislike the cross product, because it doesn't allow us to make those distinctions

jrus (me@jacobrus.com)
2018-09-15 20:24:56

@Scott but anyway, it's fine with me to consider duals to be the same color or whatever

Scott (scott@vorthmann.org)
2018-09-15 20:25:32

yes, it is just the only way I learned how to think of these things. Every time I read GA I feel like I almost internalize it, but it always slips away without a visualization

jrus (me@jacobrus.com)
2018-09-15 20:25:36

it's likely you can get to all of these dual orbits by repeatedly doing joins and meets

Scott (scott@vorthmann.org)
2018-09-15 20:25:46

yes, seems likely

jrus (me@jacobrus.com)
2018-09-15 20:25:59

there is one other way to get orbits

jrus (me@jacobrus.com)
2018-09-15 20:26:05

which is to just make up coordinates

jrus (me@jacobrus.com)
2018-09-15 20:26:10

by putting in small integers

Scott (scott@vorthmann.org)
2018-09-15 20:26:13

sure

jrus (me@jacobrus.com)
2018-09-15 20:26:18

either in the red or blue coordinate systems

Scott (scott@vorthmann.org)
2018-09-15 20:26:31

I've done that for quaternions too, trying to get interesting projections from 4d

jrus (me@jacobrus.com)
2018-09-15 20:27:22

I want to try to take one of these methods, generate like 10k (or a million) orbits, and then draw them from least to most important, in the style I was drawing those zigzag pictures

Scott (scott@vorthmann.org)
2018-09-15 20:27:23

where interesting == uses mostly vZome orbits

Scott (scott@vorthmann.org)
2018-09-15 20:27:32

yes, I remember

Scott (scott@vorthmann.org)
2018-09-15 20:28:08

you just want to remember their "generation number", at least for one measure of importance

jrus (me@jacobrus.com)
2018-09-15 20:28:10

draw both on the plane (gnomonic projection), on an orthographic or perspective projection of the sphere, and maybe stereographic projection

jrus (me@jacobrus.com)
2018-09-15 20:28:57

yeah, so make an ordered set thingy, and every time we get a new element just multiply against every previous one in our set, adding new products at the end

Scott (scott@vorthmann.org)
2018-09-15 20:29:05

sounds great, so what is stopping us? You have part of GA already implemented

jrus (me@jacobrus.com)
2018-09-15 20:29:10

nothing in particular

jrus (me@jacobrus.com)
2018-09-15 20:29:20

just have to go do it

Scott (scott@vorthmann.org)
2018-09-15 20:29:23

won't we likely get duplicates?

jrus (me@jacobrus.com)
2018-09-15 20:29:33

yes, hence the set

jrus (me@jacobrus.com)
2018-09-15 20:29:39

want to ignore duplicates

jrus (me@jacobrus.com)
2018-09-15 20:29:51

otherwise the size blows up even more

Scott (scott@vorthmann.org)
2018-09-15 20:29:59

ah, not an ordering of sets, but a set with order

jrus (me@jacobrus.com)
2018-09-15 20:30:58

I bought a "ball of whacks" to go with my big 6-cube thing

Scott (scott@vorthmann.org)
2018-09-15 20:31:07

so we can seed it with two blue vectors, one on axis and one off?

Scott (scott@vorthmann.org)
2018-09-15 20:31:13

lol

Scott (scott@vorthmann.org)
2018-09-15 20:31:33

love those toys, I have all of them until he started doing multi-color

Scott (scott@vorthmann.org)
2018-09-15 20:31:42

(multi-color ball of whacks)

jrus (me@jacobrus.com)
2018-09-15 20:31:49

I think simon might enjoy it

jrus (me@jacobrus.com)
2018-09-15 20:32:06

it's easier than zometool for him

jrus (me@jacobrus.com)
2018-09-15 20:32:08

I imagine

Scott (scott@vorthmann.org)
2018-09-15 20:32:52

There is a cool tiling you can do... a planar arrangement with a triangle grid symmetry

Scott (scott@vorthmann.org)
2018-09-15 20:33:37

where the peaks on one side match the dips on the other

jrus (me@jacobrus.com)
2018-09-15 20:33:59

anyway, yes, set with order

jrus (me@jacobrus.com)
2018-09-15 20:34:15

like the IndexedSet I was using for dedupe in the shape renderer thingy

Scott (scott@vorthmann.org)
2018-09-15 20:35:41

yes

Scott (scott@vorthmann.org)
2018-09-15 20:37:20

blue lines correspond to blue planes, but intersecting blue planes gives you red lines and yellow lines

Scott (scott@vorthmann.org)
2018-09-15 20:37:30

I'm trying to map that to the GA language

jrus (me@jacobrus.com)
2018-09-15 20:39:27

joining red lines/vectors (red projective points) gives you blue planes/bivectors (blue projective lines). then intersecting blue planes gives you red/blue/yellow lines (projective points)

Scott (scott@vorthmann.org)
2018-09-15 20:39:33

three blue lines should be enough to generate the rest of the blue lines as plane intersections, and the reds and yellows too

Scott (scott@vorthmann.org)
2018-09-15 20:40:53

really you could start with red, yellow, or blue, and generate the others, right?

jrus (me@jacobrus.com)
2018-09-15 20:41:01

have to pick the right ones, but that might be right

jrus (me@jacobrus.com)
2018-09-15 20:41:29

if you pick 3 orthogonal blue directions you don't get any 5-fold symmetries

Scott (scott@vorthmann.org)
2018-09-15 20:41:33

yes, easy to miss the right yellow needed to go beyond octahedral

Scott (scott@vorthmann.org)
2018-09-15 20:41:39

same idea

jrus (me@jacobrus.com)
2018-09-15 20:42:00

I think you might need 4 blue directions to start. not precisely sure

jrus (me@jacobrus.com)
2018-09-15 20:42:10

can definitely do it with 6 red directions

Scott (scott@vorthmann.org)
2018-09-15 20:42:22

don't see why... it should correspond to three mirrors for the Coxeter group

jrus (me@jacobrus.com)
2018-09-15 20:43:05

well I'm thinking about which quaternions you need. not sure about join/meet of planes/lines

Scott (scott@vorthmann.org)
2018-09-15 20:43:19

the trick is to treat all RYB lines as equally "important", whether they are the three you started with or not

jrus (me@jacobrus.com)
2018-09-15 20:43:27

well sure

jrus (me@jacobrus.com)
2018-09-15 20:43:43

anyway, it doesn't really matter exactly how many you need to start with

jrus (me@jacobrus.com)
2018-09-15 20:44:16

it's a bummer everything on george hart's site is vrml files

Scott (scott@vorthmann.org)
2018-09-15 20:45:53

If I were doing this on my own, whenever I generated a "new" line, I would generate the whole orbit. Are you thinking of doing that, or working only in one fundamental region?

jrus (me@jacobrus.com)
2018-09-15 20:46:15

yeah, want to generate all the rotated versions

Scott (scott@vorthmann.org)
2018-09-15 20:46:27

kinda have to, I guess

Scott (scott@vorthmann.org)
2018-09-15 20:46:43

or you'll end up treating other zones as "next generation"

jrus (me@jacobrus.com)
2018-09-15 20:46:44

because want to combine them

Scott (scott@vorthmann.org)
2018-09-15 20:46:47

yes

jrus (me@jacobrus.com)
2018-09-15 20:47:02

and the combinations with different versions of the same orbit are different

Scott (scott@vorthmann.org)
2018-09-15 20:47:06

yes

jrus (me@jacobrus.com)
2018-09-15 20:47:41

it's probably possible to be clever and cut down the amount of work involved

jrus (me@jacobrus.com)
2018-09-15 20:47:55

but just super overdoing it is fine too. computers are fast

Scott (scott@vorthmann.org)
2018-09-15 20:47:57

in essence, you need to be sure you use all five orientations of green lines, for example

Scott (scott@vorthmann.org)
2018-09-15 20:48:18

and ditto for pretty much everything not RYB

Scott (scott@vorthmann.org)
2018-09-15 20:48:28

yeah

jrus (me@jacobrus.com)
2018-09-15 20:48:37

one way is to store one copy of the orbit in the indexed set

Scott (scott@vorthmann.org)
2018-09-15 20:48:57

yup

jrus (me@jacobrus.com)
2018-09-15 20:48:59

then take each one in turn, and try multiplying by every orientation of every item in the indexed set

Scott (scott@vorthmann.org)
2018-09-15 20:49:06

the canonical one I presume

jrus (me@jacobrus.com)
2018-09-15 20:49:07

but only store back new orbits

jrus (me@jacobrus.com)
2018-09-15 20:49:37

I should just code this up. :)

Scott (scott@vorthmann.org)
2018-09-15 20:49:47

well duh!

jrus (me@jacobrus.com)
2018-09-15 20:49:55

I started at some point yesterday

Scott (scott@vorthmann.org)
2018-09-15 20:50:02

but can we do it so that we render rings as we go?

jrus (me@jacobrus.com)
2018-09-15 20:50:22

I wasn't planning to do that

Scott (scott@vorthmann.org)
2018-09-15 20:50:26

or maybe: do two generations, and we'll render the result

jrus (me@jacobrus.com)
2018-09-15 20:50:38

I was just going to make an ordered list of the first 1000 or something

jrus (me@jacobrus.com)
2018-09-15 20:51:04

but sure

jrus (me@jacobrus.com)
2018-09-15 20:51:29

amazon reviews of high school textbooks are the least useful thing ever

Scott (scott@vorthmann.org)
2018-09-15 20:51:33

then "resolve" a few to see where we leave the vZome realm, and perhaps what is missing there?

Scott (scott@vorthmann.org)
2018-09-15 20:52:13

oh, right, I need to try your quaternion for yellow!

Scott (scott@vorthmann.org)
2018-09-15 20:52:16

forgot about that

jrus (me@jacobrus.com)
2018-09-15 20:52:19

"good". "great". "arrived damaged". "terrible textbook", "item as described". "I bought this so my son could leave his book at school and have another copy at home". etc.

Scott (scott@vorthmann.org)
2018-09-15 20:52:27

rofl

jrus (me@jacobrus.com)
2018-09-15 20:52:29

basically no attempts to actually review the book

Scott (scott@vorthmann.org)
2018-09-15 20:52:41

reviewing the seller, not the item

jrus (me@jacobrus.com)
2018-09-15 20:53:04

I think there are some people who just reflexively write reviews even if they have nothing to say

Scott (scott@vorthmann.org)
2018-09-15 20:53:22

oh, they get reviewer points, so absolutely

Scott (scott@vorthmann.org)
2018-09-15 20:53:30

or some type of coin

jrus (me@jacobrus.com)
2018-09-15 20:53:30

reviewer points?

jrus (me@jacobrus.com)
2018-09-15 20:54:05

"Who wants this anyways? I bought this because my parents forced me to during summer vacation so that I wouldn't forget Geometry even though I am taking advanced computer science over the summer for college credit. You will not need to buy this book because usually you take geometry for ONE YEAR it is just stupid things, basically all algebra. If anything, buy an algebra textbook or something because all of the stuff in this book I all ready knew. So there is no need to buy it for your kid. On the other hand if you are an old parent or something and want to learn some basic math this would be a descent book to purchase, but still buy some of the algebra books anyway because they have more things to learn."

Scott (scott@vorthmann.org)
2018-09-15 20:54:07

I'm sure that things like Ebay are gamified... I have a friend who collects records, and reviews them, and has mentioned this

Scott (scott@vorthmann.org)
2018-09-15 20:54:40

no HS kid is worried about building up his reviewer cred... that is an example of something else

Scott (scott@vorthmann.org)
2018-09-15 20:55:07

"an old parent or something" rofl

Scott (scott@vorthmann.org)
2018-09-15 20:55:20

like old parents weren't taught any math?

Scott (scott@vorthmann.org)
2018-09-15 20:55:41

y'know, they didn't have Algebra back then

jrus (me@jacobrus.com)
2018-09-15 20:55:49

here's an actual review, way way down the list "As a math tutor, I didn't think I could find a geometry textbook I disliked more than "Discovering Geometry" by Michael Serra. Then I encountered this book. (Specifically, I have seen the Michigan version, but in my experience, the state-by-state variation among different versions of the same textbook is relatively minimal.)

Geometry by Larson, Boswell, et al is disorganized and dizzying. In short, it is simply horrendous. It is so replete with dazzling colors and uninformative pictures that I can hardly find the theorems. (It's like a "Where's Waldo?" of theorems and postulates.) By contrast, the Jurgensen book may look dry, but the authors conservatively reserve color to bring your attention to the most important information, such as theorems you should memorize. Larson, et al could really learn something from the more "boring" geometry books of years past.

Just do a chapter-by-chapter comparison with the Jurgensen book, and you'll realize how much material is omitted from this book that used to be taught in geometry classes 20 years ago. This book is poorly organized and doesn't even teach basic constructions. Also, the index, glossary, and other reference materials at the back of the book are not very well formatted. Anyone comparing this book with an older geometry book from 15 or 20 years ago will understand why many veteran math teachers bemoan such watered-down textbooks and why so many college freshmen have to take remedial high school mathematics to learn topics they should have covered before entering college.

Furthermore, it weighs a ton! I chalk that up to the number of useless photographs and graphics in it. (I find the quality of a textbook is inversely proportional to the number of fancy pictures in it.) The Jurgensen book packs far more information in it at a fraction of the weight or volume. The book is a prime example of a textbook with a lot of filler and very little meat. In short, I would never recommend this book to a student."

Scott (scott@vorthmann.org)
2018-09-15 20:57:22

sounds like this tutor wants the classical axiomatic approach... theorems as stepping-stones to more theorems, and Euclid help you if you don't get one of them

jrus (me@jacobrus.com)
2018-09-15 20:57:48

most high school geometry books I looked at were very watered down

jrus (me@jacobrus.com)
2018-09-15 20:57:59

even the ones praised by reviewers as "old school" and "rigorous"

Scott (scott@vorthmann.org)
2018-09-15 20:58:04

HS anything books, no doubt

jrus (me@jacobrus.com)
2018-09-15 20:58:08

yeah

jrus (me@jacobrus.com)
2018-09-15 20:59:25

oh another book to look at is Lockhart's book Measurement, which is not by any means a textbook but has nice narrative and some fun problems

Scott (scott@vorthmann.org)
2018-09-15 20:59:35

that looks like it fits within my belief system, yes

Scott (scott@vorthmann.org)
2018-09-15 20:59:58

ok

jrus (me@jacobrus.com)
2018-09-15 21:00:21

schoenfeld is great

Scott (scott@vorthmann.org)
2018-09-15 21:00:45

at the end of the day, any text is a linear presentation, and that is a disservice to just about any subject. We need hyper-textbooks.

jrus (me@jacobrus.com)
2018-09-15 21:00:48

he was teaching undergrad-level elective problem solving courses, and did a bunch of little studies on his students

Scott (scott@vorthmann.org)
2018-09-15 21:00:55

ok

jrus (me@jacobrus.com)
2018-09-15 21:01:15

where he was basically shocked that despite having done high school geometry 2-3 years before, his students had no idea what the basic point was

jrus (me@jacobrus.com)
2018-09-15 21:01:28

and couldn't solve even the most basic non-trivial problems

jrus (me@jacobrus.com)
2018-09-15 21:01:46

didn't understand that constructions could be part of a proof process and vice versa

jrus (me@jacobrus.com)
2018-09-15 21:01:55

thought constructions were just recipes to memorize

Scott (scott@vorthmann.org)
2018-09-15 21:02:03

afk

jrus (me@jacobrus.com)
2018-09-15 21:02:06

cheers

Scott (scott@vorthmann.org)
2018-09-15 21:33:41

back

Scott (scott@vorthmann.org)
2018-09-15 21:38:00

reshared https://beta.observablehq.com/d/3981794cbbb9e5e8

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-15 21:38:40

the yellow ring is not a yellow plane... perhaps we mis-communicated

Scott (scott@vorthmann.org)
2018-09-15 21:38:45

it does contain a yellow line

jrus (me@jacobrus.com)
2018-09-15 21:39:42

what is this yellow thing?

Scott (scott@vorthmann.org)
2018-09-15 21:40:08

I applied your quaternion to the default ring mesh, which lies in the XY plane

jrus (me@jacobrus.com)
2018-09-15 21:40:15

oh

jrus (me@jacobrus.com)
2018-09-15 21:40:22

I might have screwed up my arithmetic :)

jrus (me@jacobrus.com)
2018-09-15 21:41:03

I'll try to take a look in a while

Scott (scott@vorthmann.org)
2018-09-15 21:41:09

no hurry

jrus (me@jacobrus.com)
2018-09-15 22:03:21

@Scott order of orbits if I just go in order taking cross products: red,blue,orange,yellow,apple,olive,rose,black,sand,lavender,,,navy, turquoise,,green,purple,,,sulfur,,,,,,,,,,,,,,,,cinnamon,,,,,,,,,,, ,,,,,,,,,maroon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,spruce,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,coral,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

jrus (me@jacobrus.com)
2018-09-15 22:03:35

if there's a blank between commas that means there's no name for it

jrus (me@jacobrus.com)
2018-09-15 22:04:27

brown comes considerably after coral

jrus (me@jacobrus.com)
2018-09-15 22:05:21

I should check if that got all your named orbits

jrus (me@jacobrus.com)
2018-09-15 22:06:00

brown is number 900 something

jrus (me@jacobrus.com)
2018-09-15 22:06:28

spruce is 158, coral is 274

jrus (me@jacobrus.com)
2018-09-15 22:07:07

if we start with blue the order is different

jrus (me@jacobrus.com)
2018-09-15 22:07:44

blue,red,yellow,orange,green,purple,apple,black,olive,rose,,sand, lavender,,,,navy,turquoise,maroon,,brown,cinnamon,,,,,spruce,,,,, ,,,,,,coral,,,,,,sulfur,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

jrus (me@jacobrus.com)
2018-09-15 22:21:10

@Scott at some point I can try separating vectors from bivectors in 2 different arrays, and only combine like with like

jrus (me@jacobrus.com)
2018-09-15 22:21:32

for now gotta run

Scott (scott@vorthmann.org)
2018-09-15 22:28:11

wow, that's remarkable. The second order looks much more like what I would expect... and makes me curious about those gaps before navy

Scott (scott@vorthmann.org)
2018-09-15 22:32:27

but I'm missing something... how does yellow arise from taking blue X red? That would imply that some pair of a red and a blue strut are both orthogonal to a yellow strut. Yellow lies in a blue plane, but it certainly does not lie in a red plane. What am I misinterpreting?

Scott (scott@vorthmann.org)
2018-09-15 22:34:03

sorry to be dense

Scott (scott@vorthmann.org)
2018-09-15 22:34:54

reading Chisholm is certainly making me feel dense

jrus (me@jacobrus.com)
2018-09-15 22:55:42

@Scott red and yellow both arise from blue x blue

jrus (me@jacobrus.com)
2018-09-15 22:56:13

@Scott remember we are doing all 120 icosahedral symmetries for each pair, and adding any uniques to the list

jrus (me@jacobrus.com)
2018-09-15 22:57:19

@Scott just doing combinations of the first 30 entries in the list creates 7171 total list entries

jrus (me@jacobrus.com)
2018-09-15 22:57:50

or in the case of starting with red, 8990 entries

Scott (scott@vorthmann.org)
2018-09-15 23:03:51

Oh of course... That's what I meant: dense

Scott (scott@vorthmann.org)
2018-09-15 23:05:11

I trust you can emit the list of the prototypes themselves

Scott (scott@vorthmann.org)
2018-09-15 23:05:59

then we just need a function to generate the quaternion from [0,0,1] to each one, and we can render them all as rings

Scott (scott@vorthmann.org)
2018-09-15 23:06:26

or at least all up to maroon in the blue-first list

Scott (scott@vorthmann.org)
2018-09-15 23:07:22

already that will be too noisy, probably

Scott (scott@vorthmann.org)
2018-09-15 23:08:41

and we really want to paint the "dots" on the sphere too... I'll work on the 3js for that

jrus (me@jacobrus.com)
2018-09-15 23:17:44

@Scott sure

jrus (me@jacobrus.com)
2018-09-15 23:21:15

@Scott I'm planning to draw these just as lines instead of as rings

jrus (me@jacobrus.com)
2018-09-15 23:21:22

i.e. in 2d

jrus (me@jacobrus.com)
2018-09-15 23:23:22

but we can draw them as rings etc. in 3D as an initial explanation

jrus (me@jacobrus.com)
2018-09-15 23:23:59

I think if there are thousands of lines the 3d version might break down a bit

Scott (scott@vorthmann.org)
2018-09-15 23:24:19

sure... but I want to see just the first 25 or less

Scott (scott@vorthmann.org)
2018-09-15 23:24:28

reshared... added blue "dots"

jrus (me@jacobrus.com)
2018-09-15 23:24:30

we can do it for all your named ones e.g.

Scott (scott@vorthmann.org)
2018-09-15 23:24:36

i.e. just offset rings

Scott (scott@vorthmann.org)
2018-09-15 23:25:11

I also want to pick colors for the first 5-6 gaps

jrus (me@jacobrus.com)
2018-09-15 23:25:38

@Scott I think for the dots it would be cool to draw (sections of) cones through the origin

jrus (me@jacobrus.com)
2018-09-15 23:25:50

with the dot as the axis of the cone

jrus (me@jacobrus.com)
2018-09-15 23:26:33

so it would basically be a little wall parallel to the ring / perpendicular to sphere surface

Scott (scott@vorthmann.org)
2018-09-15 23:26:36

you mean a widening stack of rings?

Scott (scott@vorthmann.org)
2018-09-15 23:26:45

oh, I see

jrus (me@jacobrus.com)
2018-09-15 23:26:50

a little circular wall centered on the point

Scott (scott@vorthmann.org)
2018-09-15 23:27:03

can do

jrus (me@jacobrus.com)
2018-09-15 23:27:14

but your version might be better

jrus (me@jacobrus.com)
2018-09-15 23:27:17

can test a few

jrus (me@jacobrus.com)
2018-09-15 23:28:11

could also maybe do a translucent same-color stripe under each "plane" ring

jrus (me@jacobrus.com)
2018-09-15 23:28:20

parallel to the sphere

jrus (me@jacobrus.com)
2018-09-15 23:28:42

and draw the dots as wall + translucent interior

Scott (scott@vorthmann.org)
2018-09-15 23:48:22

working on the cones for now... the geometry is annoying. The apex is not at zero

Scott (scott@vorthmann.org)
2018-09-15 23:48:31

the whole cone is centered at zero

Scott (scott@vorthmann.org)
2018-09-15 23:54:39

reshared

jrus (me@jacobrus.com)
2018-09-15 23:57:12

@Scott are there2 parts to the dots?

jrus (me@jacobrus.com)
2018-09-15 23:57:16

i.e. a cone and a flat bit?

Scott (scott@vorthmann.org)
2018-09-15 23:57:37

the cone can be open or closed... I liked them better closed, but I'll show you open

jrus (me@jacobrus.com)
2018-09-15 23:57:43

oh I see

Scott (scott@vorthmann.org)
2018-09-15 23:58:00

reshared

jrus (me@jacobrus.com)
2018-09-15 23:58:46

@Scott it's fun to zoom through the outside of the sphere

Scott (scott@vorthmann.org)
2018-09-15 23:59:14

at this cone radius, we could use cylinder just as easily, and then they would start at the sphere, rather than an apex at the center

Scott (scott@vorthmann.org)
2018-09-15 23:59:23

yes

Scott (scott@vorthmann.org)
2018-09-15 23:59:39

so there's that

jrus (me@jacobrus.com)
2018-09-15 23:59:40

oh, by "cone" I didn't actually mean draw all the way to the middle

Scott (scott@vorthmann.org)
2018-09-15 23:59:43

in favor of cones

Scott (scott@vorthmann.org)
2018-09-16 00:00:01

well, they don't give me an option with these simple prebuilt geometries

jrus (me@jacobrus.com)
2018-09-16 00:00:04

I just meant a part of the cone near the sphere surface

Scott (scott@vorthmann.org)
2018-09-16 00:00:08

yes, I know

Scott (scott@vorthmann.org)
2018-09-16 00:00:19

can't do it without a custom Geometry... too tired tonight

Scott (scott@vorthmann.org)
2018-09-16 00:00:34

too tired to even type apparently

Scott (scott@vorthmann.org)
2018-09-16 00:00:43

I think I'd better get to bed

jrus (me@jacobrus.com)
2018-09-16 00:00:57

cheers

Scott (scott@vorthmann.org)
2018-09-16 00:01:02

good night

Scott (scott@vorthmann.org)
2018-09-16 00:02:45

one thing... the order of your blue-first list depends on which blue orbits you happen to cross first, right? That is, the order of orbits could vary

Scott (scott@vorthmann.org)
2018-09-16 00:03:36

you might look for an order that produces green before orange, for example

Scott (scott@vorthmann.org)
2018-09-16 00:03:57

I'd be curious to see if that would "pack" the vZome orbits with fewer gaps

Scott (scott@vorthmann.org)
2018-09-16 00:04:31

and now good night

jrus (me@jacobrus.com)
2018-09-16 00:49:27

@Scott yes, it depends on the order of my "icosahedral_symmetry" function

jrus (me@jacobrus.com)
2018-09-16 00:49:34

which I could certainly change

jrus (me@jacobrus.com)
2018-09-16 00:50:06

@Scott there are some other ways to generate orbits, for example by using the red coordinate system and making combinations with small integers

jrus (me@jacobrus.com)
2018-09-16 00:50:10

or the blue coordinate system

jrus (me@jacobrus.com)
2018-09-16 00:53:20

one way to classify the orbits would be to take all icosahedrally symmetrical struts, find the red coordinates and reduce each one to lowest terms [may need to figure out how these transform under scaling by phi, and scale a few times to find the simplest representative], and take the sum of the (absolute values of) coordinates

jrus (me@jacobrus.com)
2018-09-16 00:53:36

so then e.g. red = 1, blue = 2, yellow = 3, green = 4

jrus (me@jacobrus.com)
2018-09-16 01:04:31

[there are some other 3s]

Scott (scott@vorthmann.org)
2018-09-16 11:39:12

@jrus I have updated vZomeRenderer to be reactive unless you have set an explicit width

Scott (scott@vorthmann.org)
2018-09-16 11:40:12

4th argument is aspect ratio, defaulted to 8/5

Scott (scott@vorthmann.org)
2018-09-16 11:42:26

@jrus also, if you downloaded the mis-numbered vZome build 27, please discard and download the new build 36

Scott (scott@vorthmann.org)
2018-09-16 11:51:36

I now understand your red-coordinate ordering of orbits. It is still somewhat counter-intuitive that there is a unique set of coordinates for every point, but as I think through examples, it starts to feel right. Of course there are many Zome paths to any point, but only one red path (up to reordering, which only affects the 3D embedding of the 6D coordinate system).

Scott (scott@vorthmann.org)
2018-09-16 11:54:00

To be more accurate, only one shortest red path.

jrus (me@jacobrus.com)
2018-09-16 13:32:10

right

jrus (me@jacobrus.com)
2018-09-16 13:32:18

@Scott I think this is also a good "distance" measure

jrus (me@jacobrus.com)
2018-09-16 13:32:29

you can count the red strut distance

jrus (me@jacobrus.com)
2018-09-16 13:32:36

(half-red strut distance)

jrus (me@jacobrus.com)
2018-09-16 13:32:59

[not sure about when it's rational]

jrus (me@jacobrus.com)
2018-09-16 13:35:13

@Scott not sure whether there's a fast algorithm for, given a particular point in space (under floating point coordinates) find the nearest zome points with lowest red strut distance

jrus (me@jacobrus.com)
2018-09-16 13:35:29

that would be pretty neat though

jrus (me@jacobrus.com)
2018-09-16 15:05:15

I should figure out the formula for computing Euclidean quadrance in terms of red strut coordinates

Scott (scott@vorthmann.org)
2018-09-16 15:31:51

that would be pretty cool

Scott (scott@vorthmann.org)
2018-09-16 15:32:36

@jrus Vince Matsko and Phil Webster were just here for a short visit. I showed them a couple of the notebooks.

jrus (me@jacobrus.com)
2018-09-16 15:32:51

neat

Scott (scott@vorthmann.org)
2018-09-16 15:32:56

I'm storing some books for Vince for a few months while he travels

jrus (me@jacobrus.com)
2018-09-16 15:33:37

fun fun

Scott (scott@vorthmann.org)
2018-09-16 15:34:23

They've both be doing some divesting associated with moving. Vince gifted me with some nice books, and a twisty puzzle.

jrus (me@jacobrus.com)
2018-09-16 15:34:47

which books?

Scott (scott@vorthmann.org)
2018-09-16 15:35:23

one book: Geometric Origami, Robert Geretshläger

Scott (scott@vorthmann.org)
2018-09-16 15:35:48

Vince said it would help me understand how origami solves cubics

Scott (scott@vorthmann.org)
2018-09-16 15:36:21

also Coxeter, The Beauty of Geometry: Twelve Essays

jrus (me@jacobrus.com)
2018-09-16 15:36:41

I should get a copy of demaine's origami (etc.) book

Scott (scott@vorthmann.org)
2018-09-16 15:40:20

wow... I could learn to fold a regular 19-gon

jrus (me@jacobrus.com)
2018-09-16 15:49:18

@Scott okay, given a canonical orbit (y, z) representing (1, y, z), the quaternion which takes the vector (1, 0, 0) onto that direction is <r + 1, 0, z, -y> / 2r(r+1), where r = √(1 + y^2 + z^2)

jrus (me@jacobrus.com)
2018-09-16 15:50:06

so to compute this we need one square root and one division

jrus (me@jacobrus.com)
2018-09-16 15:50:36

oh wait, I might have messed that up, just a sec

jrus (me@jacobrus.com)
2018-09-16 15:50:53

we need two square roots

jrus (me@jacobrus.com)
2018-09-16 15:51:38

<r + 1, 0, z, -y> / √[2r(r+1)]

Scott (scott@vorthmann.org)
2018-09-16 15:52:08

awesome

jrus (me@jacobrus.com)
2018-09-16 15:52:27

@Scott by chance when you were doing the yellow thing were you rotating (0,0,1) rather than (1,0,0) ?

Scott (scott@vorthmann.org)
2018-09-16 15:52:39

yes

jrus (me@jacobrus.com)
2018-09-16 15:52:43

that could also explain it

Scott (scott@vorthmann.org)
2018-09-16 15:52:48

ok

Scott (scott@vorthmann.org)
2018-09-16 15:53:10

the axis of the ring model is (0,0,1)

Scott (scott@vorthmann.org)
2018-09-16 15:54:15

I did say the Z axis, but you probably missed it

jrus (me@jacobrus.com)
2018-09-16 15:55:19

you did. I just never claimed that was the one I was rotating before :)

Scott (scott@vorthmann.org)
2018-09-16 15:55:21

so I can do a preliminary rotation from Z to X axis

jrus (me@jacobrus.com)
2018-09-16 15:55:38

well can also just permute the axes in that expression

Scott (scott@vorthmann.org)
2018-09-16 15:55:43

or is there a simple permutation of your formula?

Scott (scott@vorthmann.org)
2018-09-16 15:55:44

lol

Scott (scott@vorthmann.org)
2018-09-16 15:57:06

so I need to do some code organization to deal with different orbits in different colors

Scott (scott@vorthmann.org)
2018-09-16 15:57:22

I've been pretty sloppy in that notebook so far

jrus (me@jacobrus.com)
2018-09-16 15:58:54

not really a big deal. don't worry about sloppiness until you have sorted out correctness

jrus (me@jacobrus.com)
2018-09-16 15:59:03

and figured out what you want it to do

Scott (scott@vorthmann.org)
2018-09-16 15:59:33

that's kinda what I mean... I want to render the first N orbits of your list, using the appropriate color where defined

Scott (scott@vorthmann.org)
2018-09-16 16:00:28

so I'll use an array of objects, like { orbit: [y,x], color : "green" }

Scott (scott@vorthmann.org)
2018-09-16 16:02:50

so I don't guess wrong, can you give me the axis-permuted version of your formula?

jrus (me@jacobrus.com)
2018-09-16 16:04:22

should be: <r + 1, a, -b, 0> / √[2r(r+1)]

jrus (me@jacobrus.com)
2018-09-16 16:04:34

takes (0, 0, 1) onto (a, b, 1)

jrus (me@jacobrus.com)
2018-09-16 16:04:42

i.e. that direction

Scott (scott@vorthmann.org)
2018-09-16 16:04:46

ok

jrus (me@jacobrus.com)
2018-09-16 16:04:57

where r = √(1 + a^2 + b^2)

jrus (me@jacobrus.com)
2018-09-16 16:05:12

@Scott there's a chance I screwed up my arithmetic

Scott (scott@vorthmann.org)
2018-09-16 16:06:53

np, we'll see

Scott (scott@vorthmann.org)
2018-09-16 16:07:38

afk for a bit

jrus (me@jacobrus.com)
2018-09-16 16:07:47

cheers

Scott (scott@vorthmann.org)
2018-09-16 21:53:12

hey @jrus

Scott (scott@vorthmann.org)
2018-09-16 21:53:43

testing your formula, or rather my attempt at implementing it, but not getting what I expect

Scott (scott@vorthmann.org)
2018-09-16 21:55:11

Here is my attempt to code your formula. Note that it has a side-effect on the quaternion argument.

Scott (scott@vorthmann.org)
2018-09-16 21:57:12

And here is my test case:

Scott (scott@vorthmann.org)
2018-09-16 21:58:00

Of course, it is all here: https://beta.observablehq.com/d/3981794cbbb9e5e8

beta.observablehq.com
jrus (me@jacobrus.com)
2018-09-16 22:15:19

@Scott okay back

jrus (me@jacobrus.com)
2018-09-16 22:15:50

@Scott also try the conjugate

Scott (scott@vorthmann.org)
2018-09-16 22:16:05

negate xyz?

Scott (scott@vorthmann.org)
2018-09-16 22:16:29

[w,-x,-y,-z]?

jrus (me@jacobrus.com)
2018-09-16 22:16:30

yeah. not precisely sure what our quaternion multiplication convention was etc.

Scott (scott@vorthmann.org)
2018-09-16 22:16:33

ok

jrus (me@jacobrus.com)
2018-09-16 22:17:04

I could have certainly screwed up my math

Scott (scott@vorthmann.org)
2018-09-16 22:17:52

conjugate didn't help... mirrored through X

jrus (me@jacobrus.com)
2018-09-16 22:18:37

@Scott the thing to do is to try applying quaternion multiplication and see what we get

jrus (me@jacobrus.com)
2018-09-16 22:19:37

i.e. make a version of quattransform with floats

Scott (scott@vorthmann.org)
2018-09-16 22:19:53

yes, I can do that

Scott (scott@vorthmann.org)
2018-09-16 22:20:02

but I'm doing it with 3js already

jrus (me@jacobrus.com)
2018-09-16 22:20:05

I'll fiddle with it a while

Scott (scott@vorthmann.org)
2018-09-16 22:20:06

that's the test

jrus (me@jacobrus.com)
2018-09-16 22:20:20

yeah, but you can't easily see the numbers that way :)

Scott (scott@vorthmann.org)
2018-09-16 22:20:58

if I return a 3js quat or vector, they are clear enough

jrus (me@jacobrus.com)
2018-09-16 22:35:37

@Scott okay, my code is fine for rotating (1,0,0) onto the direction of (1, 0, [2-1])

jrus (me@jacobrus.com)
2018-09-16 22:36:30

@Scott so now the question is how do we properly handle rotating 0,0,1 onto the appropriate thing

jrus (me@jacobrus.com)
2018-09-16 22:36:46

@Scott ... or we could just use rings in the y-z plane :P

jrus (me@jacobrus.com)
2018-09-16 22:38:21

orbit2quatf = function orbit2quatf([y, z]) { y = grfloat(y), z = grfloat(z); const r = Math.sqrt(1 + y**y + z**z); const denom = 1 / Math.sqrt(2**r**(r+1)); return [denom**(r+1), 0, -denom**z, denom**y]; }

Scott (scott@vorthmann.org)
2018-09-16 22:38:24

sure, I'm happy to just rotate first or after or whatever...

Scott (scott@vorthmann.org)
2018-09-16 22:39:22

or maybe I just screwed up the implementation

jrus (me@jacobrus.com)
2018-09-16 22:39:32

@Scott what's the best canonical orbit to use near (0,0,1) ?

Scott (scott@vorthmann.org)
2018-09-16 22:40:02

you mean inside the triangle?

jrus (me@jacobrus.com)
2018-09-16 22:40:08

yeah, which triangle?

Scott (scott@vorthmann.org)
2018-09-16 22:40:08

not red or yellow?

jrus (me@jacobrus.com)
2018-09-16 22:40:19

I mean, given an orbit

jrus (me@jacobrus.com)
2018-09-16 22:40:22

which orientation to pick

Scott (scott@vorthmann.org)
2018-09-16 22:40:53

same one you picked for X I guess... just rotate around 1,1,1

jrus (me@jacobrus.com)
2018-09-16 22:41:11

okay, so (a, b, 1) vs. (1, a, b)

Scott (scott@vorthmann.org)
2018-09-16 22:41:24

that's what I was assuming

jrus (me@jacobrus.com)
2018-09-16 22:41:31

I have to mind simon for a sec. then I'll work through it

Scott (scott@vorthmann.org)
2018-09-16 22:41:40

ok

jrus (me@jacobrus.com)
2018-09-16 22:42:03

I had the signs of z/y backwards previously.. depends on whether you multiply on the right or left as canonical

jrus (me@jacobrus.com)
2018-09-16 22:42:13

actually they might have been right relative to 3js

jrus (me@jacobrus.com)
2018-09-16 22:42:22

they were wrong relative to my quattransform function

jrus (me@jacobrus.com)
2018-09-16 22:42:45

I should figure out the conventions at some point

Scott (scott@vorthmann.org)
2018-09-16 22:44:29

so many places for sign flips to slip in

jrus (me@jacobrus.com)
2018-09-16 22:53:33

yay for computers

jrus (me@jacobrus.com)
2018-09-16 22:53:37

where you can test it right away

jrus (me@jacobrus.com)
2018-09-16 22:54:10

oh wait

jrus (me@jacobrus.com)
2018-09-16 22:54:13

I figured it out

jrus (me@jacobrus.com)
2018-09-16 22:54:26

I actually wanted to reverse the sign on the scalar part

jrus (me@jacobrus.com)
2018-09-16 22:54:27

duh

jrus (me@jacobrus.com)
2018-09-16 22:54:36

i^2= j^2 = k^2 = -1, etc.

jrus (me@jacobrus.com)
2018-09-16 22:55:04

[but of course flipping the sign on the vector part has the same effect]

jrus (me@jacobrus.com)
2018-09-16 23:00:08

@Scott here's a version that should work for you hopefully? orbit2quatf = function orbit2quatf([a, b]) { a = grfloat(a), b = grfloat(b); const r = Math.sqrt(1 + a**a + b**b); const denom = 1 / Math.sqrt(2**r**(r+1)); return [denom**(r+1), -denom**b, denom**a, 0]; }

jrus (me@jacobrus.com)
2018-09-16 23:00:27

transform (0,0,1) under this quaternion

jrus (me@jacobrus.com)
2018-09-16 23:00:45

to get a unit vector pointed in the direction of [a, b, 1]

Scott (scott@vorthmann.org)
2018-09-16 23:01:03

ok trying it

Scott (scott@vorthmann.org)
2018-09-16 23:02:31

yup, nailed it

Scott (scott@vorthmann.org)
2018-09-16 23:02:45

now I need to fix a defect with my cone alignment

Scott (scott@vorthmann.org)
2018-09-16 23:02:54

the ring is right now

Scott (scott@vorthmann.org)
2018-09-16 23:03:11

reshared

Scott (scott@vorthmann.org)
2018-09-16 23:03:36

yay quick support!

jrus (me@jacobrus.com)
2018-09-16 23:05:13

@Scott cool now just mirror it to all the other yellow orbits :)

jrus (me@jacobrus.com)
2018-09-16 23:05:43

and yeah start the cone on (0,0,1) axis

Scott (scott@vorthmann.org)
2018-09-16 23:06:02

yup, turns out my cones have been wrong for blues too

Scott (scott@vorthmann.org)
2018-09-16 23:06:05

debugging

jrus (me@jacobrus.com)
2018-09-16 23:06:17

arguably your cones were right and your rings were wrong ;)

Scott (scott@vorthmann.org)
2018-09-16 23:06:56

well, yes if you prefer rings around X

Scott (scott@vorthmann.org)
2018-09-16 23:07:35

their default does make some sense, if you don't have a trackball attached... you would see the ring edge-on, making it invisible

Scott (scott@vorthmann.org)
2018-09-16 23:42:03

@jrus OK, it is working... blues and yellows all rendered correctly. Reshared

Scott (scott@vorthmann.org)
2018-09-16 23:42:25

Now I need that list of {orbit,color} pairs

jrus (me@jacobrus.com)
2018-09-16 23:49:08

@Scott import {orbitnames} from '@jrus/zome-arithmetic'

Scott (scott@vorthmann.org)
2018-09-16 23:49:17

ok

Scott (scott@vorthmann.org)
2018-09-16 23:49:20

thx

jrus (me@jacobrus.com)
2018-09-16 23:49:33

@Scott orbitnames = Object.entries(golden_icosahedral_symmetry.orbits) .reduce((acc, [name, {canonical}]) =&gt; (acc[canonical] = name, acc), {})

jrus (me@jacobrus.com)
2018-09-16 23:49:56

unfortunately only firefox supports Object.fromEntries for now, or it would be even easier

Scott (scott@vorthmann.org)
2018-09-16 23:50:00

oh, duh, I have that too

Scott (scott@vorthmann.org)
2018-09-16 23:51:08

wait, is that the list of orbits as generated from blue cross-products?

jrus (me@jacobrus.com)
2018-09-16 23:51:17

no

jrus (me@jacobrus.com)
2018-09-16 23:51:23

this is your orbits with colors

Scott (scott@vorthmann.org)
2018-09-16 23:51:32

I'm interested in the "missing" orbits from that list

jrus (me@jacobrus.com)
2018-09-16 23:51:35

aha

Scott (scott@vorthmann.org)
2018-09-16 23:51:54

I may also use a slider to determine how deep into the list to render

jrus (me@jacobrus.com)
2018-09-16 23:52:37

@Scott { const orbits = new IndexedSet const json = JSON.stringify; const zero = json([[0,0,1],[0,0,1],[0,0,1]]); orbits.add([[1,0,1],[0,0,1],[0,0,1]]); for (let i = 0; i &lt; 10; i++) { for (let u of icosahedral_symmetry(orbits.contents[i])) { for (let j = 0; j &lt;= i; j++) { const v = orbits.contents[j]; const uv = wedge(u, v) if (json(uv) == zero) continue; orbits.add([[1,0,1]].concat(orbit2(uv)[0])); } } } return orbits.contents //.map(u =&gt; orbitnames[json(orbit2(u)[0])]).join(',') }

Scott (scott@vorthmann.org)
2018-09-16 23:52:48

cool, thank you

jrus (me@jacobrus.com)
2018-09-16 23:52:50

class IndexedSet { constructor() { this.contents = []; this.map = new Map; } add(item) { const itemhash = JSON.stringify(item); let index = this.map.get(itemhash); if (index == null) { index = this.contents.length; this.contents.push(item); this.map.set(itemhash, index); } return index; } }

jrus (me@jacobrus.com)
2018-09-16 23:53:19

also needs wedge from zome-arithmetic

Scott (scott@vorthmann.org)
2018-09-16 23:53:37

right

Scott (scott@vorthmann.org)
2018-09-16 23:54:11

I think I'd better put it off until tomorrow. For now, I'll just add reds manually

jrus (me@jacobrus.com)
2018-09-16 23:54:39

@Scott you can just use all your named colors from icosahedral_symmetry for the moment

jrus (me@jacobrus.com)
2018-09-16 23:54:53

er, or whatever you call that one

jrus (me@jacobrus.com)
2018-09-16 23:54:59

goldenicosahedralsymmetry

Scott (scott@vorthmann.org)
2018-09-16 23:55:06

yes

jrus (me@jacobrus.com)
2018-09-16 23:55:40

maybe shrink your dots a bit if you are going to make the ends solid

jrus (me@jacobrus.com)
2018-09-16 23:58:14

don't worry about that for now though

Scott (scott@vorthmann.org)
2018-09-17 00:06:18

right

Scott (scott@vorthmann.org)
2018-09-17 00:06:20

ok reshared

Scott (scott@vorthmann.org)
2018-09-17 00:06:27

just copy-pasted orbits for now

jrus (me@jacobrus.com)
2018-09-17 00:06:32

nice

Scott (scott@vorthmann.org)
2018-09-17 00:06:49

I miss my gray/white spherical triangles

jrus (me@jacobrus.com)
2018-09-17 00:07:09

we can certainly add those at some point

jrus (me@jacobrus.com)
2018-09-17 00:07:23

lots of lines crossing here :)

Scott (scott@vorthmann.org)
2018-09-17 00:07:55

yes, it is going to get noisy.... I think your zigzag lines idea will be better

jrus (me@jacobrus.com)
2018-09-17 00:07:56

most of those crossings are your other named orbits?

Scott (scott@vorthmann.org)
2018-09-17 00:08:35

many... we'll see after I add them

Scott (scott@vorthmann.org)
2018-09-17 00:08:46

too tired now

Scott (scott@vorthmann.org)
2018-09-17 00:08:54

good night, and thank you for the help

jrus (me@jacobrus.com)
2018-09-17 00:08:59

cheers

jrus (me@jacobrus.com)
2018-09-17 00:09:07

thanks for working on this

jrus (me@jacobrus.com)
2018-09-17 00:09:13

it's fun to spin

Scott (scott@vorthmann.org)
2018-09-17 18:39:18

ok @jrus reshared. The rings get pretty crowded, so I added the ability to limit the number of rings while showing all the dots

Scott (scott@vorthmann.org)
2018-09-17 18:47:20

With all planes up to purple, you can see that almost all triple intersections are covered. Only two, both yellow-green-purple, have no orbit defined.

Scott (scott@vorthmann.org)
2018-09-17 18:47:42

Some things start to make sense, at least in terms of correlations.

Scott (scott@vorthmann.org)
2018-09-17 18:48:35

lavender, maroon, olive all appear at green-green-blue intersections

Scott (scott@vorthmann.org)
2018-09-17 18:49:11

orange, apple, and sand tend to appear together in models... apparently when projecting things to red planes

Scott (scott@vorthmann.org)
2018-09-17 18:49:45

I wonder if that missing green-green intersection has occurred often.

Scott (scott@vorthmann.org)
2018-09-17 18:50:44

or the two orange-orange intersections

Scott (scott@vorthmann.org)
2018-09-17 18:51:42

So here is a task for you @jrus: find five new colors to assign to these missing orbits

Scott (scott@vorthmann.org)
2018-09-17 18:52:16

Meanwhile, I'm going to check the gaps in the blue-cross-product sequence, to see if these are the gaps

Scott (scott@vorthmann.org)
2018-09-17 19:58:32

@jrus yes, if I render dots up through number 47 in your list, I cover all the intersections up to purple... every intersection you see in the figure above. This is not surprising, I suppose, given the process for generating the sequence.

Scott (scott@vorthmann.org)
2018-09-17 19:59:04

The two triple-intersection orbits are 19 and 25.

Scott (scott@vorthmann.org)
2018-09-17 20:05:03

numbered through 25

Scott (scott@vorthmann.org)
2018-09-17 20:06:10

This ordering clearly derives from the fact that orange appears before green.

Scott (scott@vorthmann.org)
2018-09-17 20:06:42

I think we'll see the vZome orbits packed a little tighter into the sequence with green first

Scott (scott@vorthmann.org)
2018-09-17 20:07:18

which probably means ordering things so that yellow is discovered before red

Scott (scott@vorthmann.org)
2018-09-17 20:07:47

OK, I'd better stop... experience shows me you may skip over lots of this. 😉

jrus (me@jacobrus.com)
2018-09-17 20:26:12

hi scott

jrus (me@jacobrus.com)
2018-09-17 20:26:25

back from the playground

jrus (me@jacobrus.com)
2018-09-17 20:27:40

@Scott skip over lots of your comments? nah

Scott (scott@vorthmann.org)
2018-09-17 20:30:13

Picking up Lia now

jrus (me@jacobrus.com)
2018-09-17 20:30:18

cheers

jrus (me@jacobrus.com)
2018-09-17 20:30:26

how did the tournament go?

jrus (me@jacobrus.com)
2018-09-17 20:30:57

PS the mouse thing is super frustrating in safari. it goes slow most of the time but sometimes jumps a whole bunch

Scott (scott@vorthmann.org)
2018-09-17 20:31:00

I'm going to add another parameter, so we can render more rings easily

Scott (scott@vorthmann.org)
2018-09-17 20:31:30

They did well, 5th of 18 teams

jrus (me@jacobrus.com)
2018-09-17 20:36:30

@Scott PS it's also fun to remove the sphere and cones, and make the rings go from like 70–85

Scott (scott@vorthmann.org)
2018-09-17 20:57:42

yes, nice!

Scott (scott@vorthmann.org)
2018-09-17 21:03:48

reshared

Scott (scott@vorthmann.org)
2018-09-17 21:04:47

I'm sure you've noticed... the chiral orbits are only rendered one-handed

Scott (scott@vorthmann.org)
2018-09-17 21:06:31

Hmmm... wouldn't you expect the achiral orbits (that lie in blue planes) to get generated before the chiral ones, since blue is the first in the list?

Scott (scott@vorthmann.org)
2018-09-17 21:08:14

does orbit2 know when a canonicalized vector lies on the walls of the domain?

Scott (scott@vorthmann.org)
2018-09-17 21:19:34

I'm going to publish. I know a few Synergetics fanboys who will go a little berserk, probably.

Scott (scott@vorthmann.org)
2018-09-17 21:20:00

@jrus are you ready for that?

Scott (scott@vorthmann.org)
2018-09-17 21:20:07

reshared, for now

Scott (scott@vorthmann.org)
2018-09-17 21:20:18

check my prose, see if I've missed anything important

Scott (scott@vorthmann.org)
2018-09-17 21:20:40

oh, like what those cross-products manifest as, duh

jrus (me@jacobrus.com)
2018-09-17 21:43:54

@Scott sure, go for it

jrus (me@jacobrus.com)
2018-09-17 21:44:13

have been cooking. will be back in 30-60m

Scott (scott@vorthmann.org)
2018-09-17 21:44:22

nice, enjoy

Scott (scott@vorthmann.org)
2018-09-17 22:01:10

published, and shared on my vZome page on Facebook

Scott (scott@vorthmann.org)
2018-09-17 22:05:54

wow, one share already on FB.

Scott (scott@vorthmann.org)
2018-09-17 22:06:01

that never happens

jrus (me@jacobrus.com)
2018-09-17 22:21:45

@Scott maybe you can add your name in there

jrus (me@jacobrus.com)
2018-09-17 22:22:02

in your first sentence

jrus (me@jacobrus.com)
2018-09-17 22:22:19

I feel like I don't deserve sole credit for this "design"

Scott (scott@vorthmann.org)
2018-09-17 22:22:49

Well, my name is at the top of the page. 😉

Scott (scott@vorthmann.org)
2018-09-17 22:22:56

I'll add myself.

jrus (me@jacobrus.com)
2018-09-17 22:22:59

add it in the body too :)

Scott (scott@vorthmann.org)
2018-09-17 22:23:37

ok

jrus (me@jacobrus.com)
2018-09-17 22:24:17

oh you're dropping the height on each successive one?

jrus (me@jacobrus.com)
2018-09-17 22:24:26

I had thought about doing that kind of thing

Scott (scott@vorthmann.org)
2018-09-17 22:24:54

I started thinking that I really wanted the blue planes emphasized, then the idea went from there

Scott (scott@vorthmann.org)
2018-09-17 22:25:11

could do the cones too, but I think I need to stop fiddling

jrus (me@jacobrus.com)
2018-09-17 22:25:42

I think if we add a (relatively narrow) stripe parallel to the sphere plane, it will help

jrus (me@jacobrus.com)
2018-09-17 22:25:47

for the "looking axis on" case

jrus (me@jacobrus.com)
2018-09-17 22:26:41

@Scott you might want to make 2 sliders for # of orbits with rings and # of orbits with cones

Scott (scott@vorthmann.org)
2018-09-17 22:26:58

yes

jrus (me@jacobrus.com)
2018-09-17 22:26:59

and put them directly under the picture

Scott (scott@vorthmann.org)
2018-09-17 22:27:05

yes, wanted to do that

jrus (me@jacobrus.com)
2018-09-17 22:27:14

I'll get you the code, just a sec

Scott (scott@vorthmann.org)
2018-09-17 22:27:24

I also want to (someday) have orbit checkboxes, both for ring and pole

Scott (scott@vorthmann.org)
2018-09-17 22:27:42

It's fun to set "rings" to 1

Scott (scott@vorthmann.org)
2018-09-17 22:28:23

Sliders may be too interactive... there is a lot of rendering to wait for. +/- controls?

jrus (me@jacobrus.com)
2018-09-17 22:28:42

oh shit. can't handle sliders, because dragging gets stolen

jrus (me@jacobrus.com)
2018-09-17 22:28:52

that sucks :)

Scott (scott@vorthmann.org)
2018-09-17 22:28:54

damn

Scott (scott@vorthmann.org)
2018-09-17 22:28:59

or any control, probably

Scott (scott@vorthmann.org)
2018-09-17 22:29:10

right click gets stolen too

jrus (me@jacobrus.com)
2018-09-17 22:29:19

I think you do want sliders

jrus (me@jacobrus.com)
2018-09-17 22:29:31

it shouldn't be that slow

Scott (scott@vorthmann.org)
2018-09-17 22:29:34

ok

Scott (scott@vorthmann.org)
2018-09-17 22:29:50

we can switch to OrbitControl <cringe>

jrus (me@jacobrus.com)
2018-09-17 22:29:55

nah

jrus (me@jacobrus.com)
2018-09-17 22:30:01

just don't worry about it for now

Scott (scott@vorthmann.org)
2018-09-17 22:30:16

fine with me

jrus (me@jacobrus.com)
2018-09-17 22:31:36

@Scott sometime in the next couple days I would like to try just rendering the planes you get from intersecting lines, and the lines you get from intersecting planes

jrus (me@jacobrus.com)
2018-09-17 22:31:50

I think they will mostly end up as the same set, but maybe in a better order

Scott (scott@vorthmann.org)
2018-09-17 22:32:25

yes, good idea

Scott (scott@vorthmann.org)
2018-09-17 22:32:41

I was thinking of playing with your code to see if I couldn't tease out yellow before red

jrus (me@jacobrus.com)
2018-09-17 22:33:09

and also do both ordered by red strut taxi distance to the minimal representative of an orbit

Scott (scott@vorthmann.org)
2018-09-17 22:33:20

yes

jrus (me@jacobrus.com)
2018-09-17 22:34:16

and then render just lines, thousands or more, all in the same hue, varying from super pale to dark and rendered back to front

jrus (me@jacobrus.com)
2018-09-17 22:34:20

not on a 3d thing

jrus (me@jacobrus.com)
2018-09-17 22:34:30

but just as lines, under some projection

jrus (me@jacobrus.com)
2018-09-17 22:34:53

(probably with a choice of whether to center the projection at a 2, 3, or 5 vertex

jrus (me@jacobrus.com)
2018-09-17 22:35:33

I wonder what the centroid of the canonical triangle is

jrus (me@jacobrus.com)
2018-09-17 22:36:14

actually would be interesting to see how many triangle centers we can construct (ones relevant to spherical geometry; not sure how those compare to the planar case)

Scott (scott@vorthmann.org)
2018-09-17 22:42:48

yes, was wondering the same the other night. I've told you about the spruce orbit. I suspect it may be the centroid

Scott (scott@vorthmann.org)
2018-09-17 22:43:29

Nah, turquoise looks much more likely.

jrus (me@jacobrus.com)
2018-09-17 22:49:01

"""In particular, for a spherical polygon, the moment is the half the sum of (a x b) / ||a x b|| ** (angle between a and b) for each pair of consecutive vertices a,b. (That's for the region to the left of the path; negate it for the region to the right of the path.)"""

jrus (me@jacobrus.com)
2018-09-17 22:50:52

[from some stackoverflow comment; not sure that’s actually right]

jrus (me@jacobrus.com)
2018-09-17 22:53:36

http://www.demonstrations.wolfram.com/FateOfTheEulerLineAndTheNinePointCircleOnTheSphere/#more

demonstrations.wolfram.com
jrus (me@jacobrus.com)
2018-09-17 22:53:46

[not about the centroid per se]

Scott (scott@vorthmann.org)
2018-09-18 21:08:42

whew, back from another long volleyball night... match and then Lia had to ref for Varsity

jrus (me@jacobrus.com)
2018-09-18 21:08:59

nice

jrus (me@jacobrus.com)
2018-09-18 21:09:07

how'd the game go?

Scott (scott@vorthmann.org)
2018-09-18 21:09:21

lost, both JV and varsity... but close sets

jrus (me@jacobrus.com)
2018-09-18 21:09:36

alas. any good swings/blocks/saves?

Scott (scott@vorthmann.org)
2018-09-18 21:09:58

oh sure, but not her best outing

jrus (me@jacobrus.com)
2018-09-18 21:10:15

(I often felt better about a few really satisfying hits than winning per se)

Scott (scott@vorthmann.org)
2018-09-18 21:10:19

the sets are pretty variable, so nobody gets great kills

Scott (scott@vorthmann.org)
2018-09-18 21:10:55

she had a nice block, but the ref missed the hitter's touch after... so they lost the point

jrus (me@jacobrus.com)
2018-09-18 21:11:13

yeah. good passing and an amazing setter makes a big difference. we were never super consistent

jrus (me@jacobrus.com)
2018-09-18 21:11:33

in the intramural games it was a joke

jrus (me@jacobrus.com)
2018-09-18 21:11:42

we were lucky to get a set at all :)

Scott (scott@vorthmann.org)
2018-09-18 21:11:43

it was fun to watch varsity... pretty skilled

Scott (scott@vorthmann.org)
2018-09-18 21:12:10

amazing how much players can develop in a year or two

Scott (scott@vorthmann.org)
2018-09-18 21:13:04

my Facebook post is doing OK... 200-some reach, four shares... not too bad

Scott (scott@vorthmann.org)
2018-09-18 21:16:37

lol, FB is trying to get me hooked on "boosting"... offering a credit to boost this post

Scott (scott@vorthmann.org)
2018-09-18 21:19:22

I'll have my usual conf call in 10 minutes... hopefully <60 min this time

jrus (me@jacobrus.com)
2018-09-18 21:37:30

heh

jrus (me@jacobrus.com)
2018-09-18 21:37:31

cheers

jrus (me@jacobrus.com)
2018-09-18 21:37:34

I'm off to eat

jrus (me@jacobrus.com)
2018-09-18 21:48:54

okay, back

jrus (me@jacobrus.com)
2018-09-18 21:49:02

I should go back to trying to figure out this red strut coordinate system

jrus (me@jacobrus.com)
2018-09-18 21:49:16

I didn't do much today

Scott (scott@vorthmann.org)
2018-09-18 22:53:53

works for me. I'm going to keep doing research on the trackball... there has to be a way to listen to just the canvas element

jrus (me@jacobrus.com)
2018-09-18 23:25:27

doing golden ratio arithmetic by hand is annoying

jrus (me@jacobrus.com)
2018-09-18 23:25:32

I make lots of trivial errors

jrus (me@jacobrus.com)
2018-09-18 23:25:43

I need to make myself some better cheat sheets of basic facts

Scott (scott@vorthmann.org)
2018-09-18 23:26:12

hey, I know a good golden field calculator

jrus (me@jacobrus.com)
2018-09-18 23:26:23

that's not the problem

Scott (scott@vorthmann.org)
2018-09-18 23:26:23

for some value of "good"

jrus (me@jacobrus.com)
2018-09-18 23:27:33

I need to remember stuff like φ + φ⁻ = √5

Scott (scott@vorthmann.org)
2018-09-18 23:30:24

oh yeah, I can never remember those things either... though I'm seldom doing anything on paper

Scott (scott@vorthmann.org)
2018-09-18 23:36:22

most of my calculation has been with code, in Java, in vZome... a much slower feedback loop than in Observable, harder to debug

Scott (scott@vorthmann.org)
2018-09-18 23:36:42

Observable is like having a REPL, but where you have better control of what is kept around

Scott (scott@vorthmann.org)
2018-09-18 23:37:54

so I'm enjoying it as a way to experiment with code, although you have been coding a lot more of the math, obviously

jrus (me@jacobrus.com)
2018-09-18 23:38:18

there's really not that much stuff in my math code. you could easily replicate it in short order if you needed I'm sure

jrus (me@jacobrus.com)
2018-09-18 23:38:57

pretty much the hardest bit is:

grinv = function grinv(a) { const [a0=0, a1=0, ad=1] = a; return simplify3((a0 + a1)**ad, 0 - a1**ad, (a0 + a1)**a0 - a1**a1); }

Scott (scott@vorthmann.org)
2018-09-18 23:43:52

yes, I'm happy to let you do those clever bits

Scott (scott@vorthmann.org)
2018-09-18 23:44:54

wtf? I think Chrome just did a self-update tonight... entire look is new

Scott (scott@vorthmann.org)
2018-09-18 23:45:33

ugh... more "flat design"

Scott (scott@vorthmann.org)
2018-09-18 23:45:40

boundaries are not as clear

Scott (scott@vorthmann.org)
2018-09-18 23:46:08

subtle differences of light gray are not good on my monitor

jrus (me@jacobrus.com)
2018-09-18 23:46:21

huh

jrus (me@jacobrus.com)
2018-09-18 23:47:08

@Scott a properly characterized display often helps a whole lot with subtle grays

jrus (me@jacobrus.com)
2018-09-18 23:47:28

i.e. having the software know what your display is putting out

jrus (me@jacobrus.com)
2018-09-18 23:47:53

though windows color management was pretty bad last time I used it seriously (10 years ago)

Scott (scott@vorthmann.org)
2018-09-18 23:51:09

I'm on Mac, but I've never learned anything about characterizing the display in any case

Scott (scott@vorthmann.org)
2018-09-18 23:51:24

next time we screen share perhaps you can give me tips

jrus (me@jacobrus.com)
2018-09-18 23:51:32

oh right

jrus (me@jacobrus.com)
2018-09-18 23:51:39

sorry

jrus (me@jacobrus.com)
2018-09-18 23:51:50

usually the built-in display profile is passable

jrus (me@jacobrus.com)
2018-09-18 23:52:13

at least for Apple displays

jrus (me@jacobrus.com)
2018-09-18 23:52:48

unfortunately most people use hardware devices for characterizing displays

jrus (me@jacobrus.com)
2018-09-18 23:53:02

so doing it by eye doesn't have the best software available

jrus (me@jacobrus.com)
2018-09-18 23:54:00

there was a nice program I used for it a decade ago, but I don't know if it still exists

jrus (me@jacobrus.com)
2018-09-18 23:54:09

I wonder if https://displaycal.net is any good

displaycal.net
jrus (me@jacobrus.com)
2018-09-18 23:55:52

not sure if you can just do things by eye with that one

Scott (scott@vorthmann.org)
2018-09-18 23:56:21

it seems to talk about "which colorimeter" you are using

jrus (me@jacobrus.com)
2018-09-18 23:56:40

yeah

jrus (me@jacobrus.com)
2018-09-18 23:58:28

@Scott it's also quite possible that your display is well characterized and chrome's update just sucks :)

Scott (scott@vorthmann.org)
2018-09-19 00:07:01

true

Scott (scott@vorthmann.org)
2018-09-19 00:07:43

I'm also old and set in my ways, no matter how I strive to stay flexible

Scott (scott@vorthmann.org)
2018-09-19 00:07:51

Hey, you kids, get offa my lawn!

Scott (scott@vorthmann.org)
2018-09-19 00:08:43

I think I'm less change-averse than many of my peers... but who knows

Scott (scott@vorthmann.org)
2018-09-19 00:09:00

I'll take credit for embracing Javascript, and leave it at that

jrus (me@jacobrus.com)
2018-09-19 00:09:03

I am way more change-averse than most of my techie peers

jrus (me@jacobrus.com)
2018-09-19 00:14:37

I think people are way over-reliant on technology, end up using it as a crutch and permanently weakening themselves: voice assistants, smartphones, televisions, cars, strollers, handheld calculators, dishwashers, stiff padded shoes, comfy office chairs, facebook, ...

jrus (me@jacobrus.com)
2018-09-19 00:16:17

on the other hand there is a lot of amazing new technology that really opens new possibilities

jrus (me@jacobrus.com)
2018-09-19 00:16:34

and all of the above things have their appropriate place

Scott (scott@vorthmann.org)
2018-09-19 01:02:51

I agree, to a large extent.

Scott (scott@vorthmann.org)
2018-09-19 01:03:22

Now, I go to weaken my ability to sleep on the floor, by sleeping on my memory foam mattress. 😉

Scott (scott@vorthmann.org)
2018-09-19 01:03:26

good night

jrus (me@jacobrus.com)
2018-09-19 15:19:55

okay, finally naptime

Scott (scott@vorthmann.org)
2018-09-19 17:59:29

how did naptime go?

jrus (me@jacobrus.com)
2018-09-19 17:59:35

still going

jrus (me@jacobrus.com)
2018-09-19 17:59:39

I'm not doing anything useful though

Scott (scott@vorthmann.org)
2018-09-19 17:59:52

sometimes that is necessary

Scott (scott@vorthmann.org)
2018-09-19 18:10:43

which is to say, useful

jrus (me@jacobrus.com)
2018-09-19 18:10:55

well, he's awake :)

Scott (scott@vorthmann.org)
2018-09-19 18:10:57

so, as any economist will tell you, you can't really avoid utility

Scott (scott@vorthmann.org)
2018-09-19 21:18:38

@jrus I'm on p7 of Wildberger's paper on Projective and Spherical Geometry... good stuff. It is remarkable how simple it all becomes in the projective view, particularly with rational trig

Scott (scott@vorthmann.org)
2018-09-19 21:40:22

wow... finished it (skipping all the proofs). I see why you sent it to me

Scott (scott@vorthmann.org)
2018-09-19 21:40:38

I love that the tetrahedral angle is spread 8/9

Scott (scott@vorthmann.org)
2018-09-19 21:46:29

I wonder if it can be made to work for S3... you'd lose the duality

jrus (me@jacobrus.com)
2018-09-19 21:53:22

@Scott at some point I calculated all the spreads for angles that can be made with default zome struts. we could also calculate all the dihedral ones, etc.

jrus (me@jacobrus.com)
2018-09-19 21:53:45

I think wildberger makes the pentagonal stuff overcomplicated

jrus (me@jacobrus.com)
2018-09-19 21:53:56

by not writing it in terms of the golden ratio per se

Scott (scott@vorthmann.org)
2018-09-19 21:55:23

well, I guess in this paper he sort of derives the golden ratio from the setup he defined, so maybe that was his intent... interesting that he never mentions it by name! Avoiding the crackpots? Or allegations of crackpottery?

jrus (me@jacobrus.com)
2018-09-19 21:55:49

wildberger certainly doesn't care about whether he gets labeled a crackpot

Scott (scott@vorthmann.org)
2018-09-19 21:55:54

lol

Scott (scott@vorthmann.org)
2018-09-19 21:56:05

so perhaps he's avoiding crackpot fanboys

jrus (me@jacobrus.com)
2018-09-19 21:56:37

that happens anyway due to him saying stuff like "there are only finitely many numbers, therefore all of the questions about whether there are infinitely many of any particular type have trivial resolution"

jrus (me@jacobrus.com)
2018-09-19 21:56:42

(paraphrased)

Scott (scott@vorthmann.org)
2018-09-19 21:56:52

yeah

Scott (scott@vorthmann.org)
2018-09-19 21:58:19

well, he can count me as a fanboy anyway... fun to read a spherical trig paper with effectively no sin, cos, pi

jrus (me@jacobrus.com)
2018-09-19 21:58:54

@Scott check out the spherical trig sections of hestenes's works if you want more practical tools (IMO)

Scott (scott@vorthmann.org)
2018-09-19 21:59:07

I'm terrified of trying to read Hestenes

Scott (scott@vorthmann.org)
2018-09-19 21:59:29

some author I could barely read said that he could barely read it, or something like that

jrus (me@jacobrus.com)
2018-09-19 21:59:46

well depends which bit you are talking about

jrus (me@jacobrus.com)
2018-09-19 21:59:56

some of it is not written for a novice audience for sure

Scott (scott@vorthmann.org)
2018-09-19 22:00:03

I feel like I need more hands-on experience with GA before I'm ready for that

Scott (scott@vorthmann.org)
2018-09-19 22:00:41

RT does start to feel natural... I cannot recite the formulas, but the concepts of spread and quadrance are easy to grasp

Scott (scott@vorthmann.org)
2018-09-19 22:01:43

Here's an application I have in mind (in the math sense):

jrus (me@jacobrus.com)
2018-09-19 22:02:07

the problem with the RT thing is that it basically squares everything repeatedly

jrus (me@jacobrus.com)
2018-09-19 22:02:20

which is of course not wrong per se

jrus (me@jacobrus.com)
2018-09-19 22:02:26

but then you end up losing info

jrus (me@jacobrus.com)
2018-09-19 22:02:45

it's quite practical in many examples

Scott (scott@vorthmann.org)
2018-09-19 22:02:52

given the vertices of the 120-cell as vectors, construct the topological model... create the edge, face, cell lists

jrus (me@jacobrus.com)
2018-09-19 22:02:56

but I don't think it's a good language for general proofs

Scott (scott@vorthmann.org)
2018-09-19 22:14:16

I started to try this once, but failed. Every surtope (vertex, edge, face, cell) defines a subspace, so it would seem to be a natural fit for GA blades.

jrus (me@jacobrus.com)
2018-09-19 22:15:00

yes, you can represent the n-volume that way if you want to

Scott (scott@vorthmann.org)
2018-09-19 22:15:08

But how seed the process, finding edges? There is a single minimum quadrance that is shared by all edges.

Scott (scott@vorthmann.org)
2018-09-19 22:15:27

if any pair of vertices have that quadrance, you've found an edge.

Scott (scott@vorthmann.org)
2018-09-19 22:16:55

now move up to finding faces... sure, you can "cheat" and note which edges share vertices, but that will just give you paths. If you want to find faces you have to limit the paths to those in the same plane (2-blade)

Scott (scott@vorthmann.org)
2018-09-19 22:17:53

but is there some equivalent "minimum quadrea" you could use to find the edges sharing a face, analogous to how we found the edges?

jrus (me@jacobrus.com)
2018-09-19 22:18:45

I don't exactly understand what you are trying to do; I can certainly believe that this method is a pain in the butt for it

Scott (scott@vorthmann.org)
2018-09-19 22:19:25

recover the topology of the 120-cell from vertex data... or any regular 4D polytope (or 3D or 2D even)

Scott (scott@vorthmann.org)
2018-09-19 22:20:38

even better would be to recover the topology of non-regular polytopes, but I'm not going to worry about that

jrus (me@jacobrus.com)
2018-09-19 22:21:10

when you say "topology", you mean which vertices are adjacent to which edges/faces/... ?

jrus (me@jacobrus.com)
2018-09-19 22:21:30

if you just give a list of vertices?

Scott (scott@vorthmann.org)
2018-09-19 22:21:33

yes, see my 10:02 comment

Scott (scott@vorthmann.org)
2018-09-19 22:21:36

yes

jrus (me@jacobrus.com)
2018-09-19 22:21:50

I'm not sure GA helps much with this

Scott (scott@vorthmann.org)
2018-09-19 22:22:05

edges as pairs of vertices, faces as lists of edges, cells as lists of faces

jrus (me@jacobrus.com)
2018-09-19 22:22:05

but if you talk to computational geometry people I wouldn't be surprised if they have some good ideas

Scott (scott@vorthmann.org)
2018-09-19 22:22:51

the other possibility is to derive the topology as you generate the vertices using Wythoff's procedure

Scott (scott@vorthmann.org)
2018-09-19 22:23:31

since the surtopes correspond to subgroup orbits

Scott (scott@vorthmann.org)
2018-09-19 22:38:14

the GA angle: I was hoping that some product (the join?) of two surtope blades (say, two edges) would produce the next level of surtope (the plane containing the face)

jrus (me@jacobrus.com)
2018-09-19 22:39:56

if you do a ^ b, where a and be are arbitrary blades, you'll get something which tells you what happens when you make something like a generalized parallelogram out of them

jrus (me@jacobrus.com)
2018-09-19 22:40:27

but that doesn't necessarily help you with some arbitrary shape

jrus (me@jacobrus.com)
2018-09-19 22:40:38

since it's probably not made up of parallelepipeds

Scott (scott@vorthmann.org)
2018-09-19 22:40:39

well, the shape is far from arbitrary, though

Scott (scott@vorthmann.org)
2018-09-19 22:41:14

and the parallelipipeds are just representations of oriented areas and volumes

Scott (scott@vorthmann.org)
2018-09-19 22:41:33

so I feel like one such oriented volume would be the volume of a dodecahedral cell

Scott (scott@vorthmann.org)
2018-09-19 22:42:08

I think I may play around with this in Observable, just for the 2D case, using Ganja

Scott (scott@vorthmann.org)
2018-09-19 22:42:36

at least generate all the products given the edges of a heptagon, or something

jrus (me@jacobrus.com)
2018-09-19 22:42:38

go for it

jrus (me@jacobrus.com)
2018-09-19 22:43:07

@Scott definitely try generating all the clifford products of various heptagon diagonals

Scott (scott@vorthmann.org)
2018-09-19 22:43:12

well, for now it is another "someday" project... I want to get some closure on the vZome stuff

Scott (scott@vorthmann.org)
2018-09-19 22:43:33

though that particular one would be about one night's work

jrus (me@jacobrus.com)
2018-09-19 22:43:54

I'm trying to figure out what a good basis is for multivectors given a red strut basis for vectors

Scott (scott@vorthmann.org)
2018-09-19 22:43:58

especially if I fork your math notebook and adapt to the heptagon field

Scott (scott@vorthmann.org)
2018-09-19 22:44:23

hmmm... you'd better have a whiteboard when you explain it to me

Scott (scott@vorthmann.org)
2018-09-19 22:44:34

your red multivectors that is

jrus (me@jacobrus.com)
2018-09-19 22:45:16

@Scott I should make some notebooks where I try to explain golden field arithmetic in a bit more comprehensible way

Scott (scott@vorthmann.org)
2018-09-19 22:47:57

yes, I was just thinking we need to catch up on the explanatory prose

Scott (scott@vorthmann.org)
2018-09-19 22:48:23

right now I'm trying to figure out how to make the vZomeRenderer into something more readily reconfigured

Scott (scott@vorthmann.org)
2018-09-19 22:48:34

without reinventing 3js APIs

jrus (me@jacobrus.com)
2018-09-19 22:48:35

it's helpful to have a cheat sheet with various stuff like ϕ – ϕ⁻ = 1, ϕ + ϕ⁻ = ϕ² – ϕ⁻² = √5, ϕ² + ϕ⁻² = 3 ϕ³ – ϕ⁻³ = 4 ϕ³ + ϕ⁻³ = 2√5 ϕ⁴ – ϕ⁻⁴ = 3√5 ϕ⁴ + ϕ⁻⁴ = 7 ϕ⁵ – ϕ⁻⁵ = 11 ϕ⁵ + ϕ⁻⁵ = 5√5 ϕ⁶ – ϕ⁻⁶ = 8√5 ϕ⁶ + ϕ⁻⁶ = 18

Scott (scott@vorthmann.org)
2018-09-19 22:50:19

gotta love Unicode

Scott (scott@vorthmann.org)
2018-09-19 22:50:35

showing my age

Scott (scott@vorthmann.org)
2018-09-19 22:52:32

I had forgotten how easy it is to generate integer lengths

Scott (scott@vorthmann.org)
2018-09-19 22:53:48

That's another thing I used to think about, but long ago abandoned... ways to "simplify" numbers in this field (or others too)

Scott (scott@vorthmann.org)
2018-09-19 22:54:29

as you're doing here... only sums of powers of ϕ with small (or unitary) coefficients

Scott (scott@vorthmann.org)
2018-09-19 22:55:20

is that "phinary" numbers? a unique representation with only coefficients of +/- one?

Scott (scott@vorthmann.org)
2018-09-19 22:55:32

or only +1

Scott (scott@vorthmann.org)
2018-09-19 22:56:04

I think I can infer the pattern for the differences

jrus (me@jacobrus.com)
2018-09-19 22:56:06

well these are indeed "phinary" representations of these numbers, but no that's not the whole idea of that one

Scott (scott@vorthmann.org)
2018-09-19 22:56:09

and the sums

jrus (me@jacobrus.com)
2018-09-19 22:56:30

you will notice the Lucas numbers here

Scott (scott@vorthmann.org)
2018-09-19 22:56:36

yes

jrus (me@jacobrus.com)
2018-09-19 22:56:38

and fibonacci numbers

jrus (me@jacobrus.com)
2018-09-19 22:56:44

in the √5 terms

Scott (scott@vorthmann.org)
2018-09-19 22:56:49

indeed

jrus (me@jacobrus.com)
2018-09-19 22:58:23

but these come up in the various spreads related to zome struts

jrus (me@jacobrus.com)
2018-09-19 22:58:52

I'm not sure if they come out of the integers, or the sums/differences of powers of ϕ/ϕ⁻

Scott (scott@vorthmann.org)
2018-09-19 22:58:54

oh, I was wondering why you found them useful

jrus (me@jacobrus.com)
2018-09-19 22:59:57

they come up a lot when you try to invert various golden rationals

jrus (me@jacobrus.com)
2018-09-19 23:00:17

it's easier to do the arithmetic if you can just pluck some integers out

Scott (scott@vorthmann.org)
2018-09-19 23:00:24

I see

Scott (scott@vorthmann.org)
2018-09-19 23:07:16

off to bed, catch you later

Scott (scott@vorthmann.org)
2018-09-20 20:55:48

@jrus I've added support for panels in VSON export, and soon I'll add panel support to the Observable code

Scott (scott@vorthmann.org)
2018-09-20 20:56:04

now I have yet another work call 😞

jrus (me@jacobrus.com)
2018-09-20 21:16:06

nice

Scott (scott@vorthmann.org)
2018-09-20 21:41:10

done

Scott (scott@vorthmann.org)
2018-09-20 21:41:17

with the call, not the coding

jrus (me@jacobrus.com)
2018-09-21 17:37:33

@Scott apparently the oldest yellow struts were decidedly greener than even slightly-less-old ones

jrus (me@jacobrus.com)
2018-09-21 17:38:31

but anyway, I'm still going to try to (sometime hopefully not too long in the future) make a hue/value categorical color picker

jrus (me@jacobrus.com)
2018-09-21 17:39:10

and we can try to put the standard zome struts as close to their original colors as possible, and then pack other colors around those

Scott (scott@vorthmann.org)
2018-09-21 17:50:11

Hi Jacob. I guess you got your old kit today

jrus (me@jacobrus.com)
2018-09-21 17:50:32

yeah, the 1993 manual is great

jrus (me@jacobrus.com)
2018-09-21 17:50:53

somehow over time zometool manuals got both less charming and less useful

jrus (me@jacobrus.com)
2018-09-21 17:51:06

but glossier I guess

jrus (me@jacobrus.com)
2018-09-21 17:51:09

so that's something

Scott (scott@vorthmann.org)
2018-09-21 17:51:09

send some photos

jrus (me@jacobrus.com)
2018-09-21 17:53:57

I should really take the staples out and feed it through someone's scanner

Scott (scott@vorthmann.org)
2018-09-21 17:56:28

going out soon... dinner and bowling with Lia's volleyball team and parents

Scott (scott@vorthmann.org)
2018-09-21 17:57:04

kind of stalled doing some refactoring in vZomeRenderer

jrus (me@jacobrus.com)
2018-09-21 17:59:21

if you give me a minute I photographed the whole manual

jrus (me@jacobrus.com)
2018-09-21 17:59:30

pages weren't really flat though

Scott (scott@vorthmann.org)
2018-09-21 17:59:53

Sure no rush

Scott (scott@vorthmann.org)
2018-09-23 10:35:45

@jrus I have finished some refactoring of vZomeRenderer, adding support for panels

Scott (scott@vorthmann.org)
2018-09-23 10:36:05

I have also incorporated your improved resolveSegments

Scott (scott@vorthmann.org)
2018-09-23 10:37:40

vZomeRenderer is now a simple convenience function, calling things like meshGroup and defaultCanvas

jrus (me@jacobrus.com)
2018-09-23 10:47:39

@Scott cool

Scott (scott@vorthmann.org)
2018-09-23 20:53:55

hey @jrus

Scott (scott@vorthmann.org)
2018-09-23 20:54:00

how has your weekend gone?

jrus (me@jacobrus.com)
2018-09-23 20:54:18

didn't write any code

Scott (scott@vorthmann.org)
2018-09-23 20:54:38

had some good family time I hope

Scott (scott@vorthmann.org)
2018-09-23 20:56:07

I pushed to get the panel support in mostly so I could send my parents a 60th anniversary card in Observable

jrus (me@jacobrus.com)
2018-09-23 20:56:15

nice

Scott (scott@vorthmann.org)
2018-09-23 20:56:16

very convenient number

Scott (scott@vorthmann.org)
2018-09-23 21:44:05

Jacob, what would you consider your best source on quaternions? Is there a particular book or article that you would credit?

jrus (me@jacobrus.com)
2018-09-24 11:09:19

@Scott no idea, sorry. that conway one is probably alright. I have it somewhere

jrus (me@jacobrus.com)
2018-09-24 11:10:48

you could go track down Hamilton's original work

jrus (me@jacobrus.com)
2018-09-24 11:10:56

but I think conventions changed a bit since then

Scott (scott@vorthmann.org)
2018-09-24 11:11:00

They are clear, but very terse... Close to the opposite of 3 blue 1 Brown

jrus (me@jacobrus.com)
2018-09-24 11:11:30

to be honest I find thinking about quaternions as scalars + bivectors a lot clearer

Scott (scott@vorthmann.org)
2018-09-24 11:12:52

Ok... Yes, the GA material is pretty clear, since they always want to demonstrate how it subsumes C and H

Scott (scott@vorthmann.org)
2018-09-24 11:12:59

Thanks

jrus (me@jacobrus.com)
2018-09-24 11:19:03

@Scott I find it's a lot clearer to think of complex numbers that way

Scott (scott@vorthmann.org)
2018-09-24 11:20:30

Yes

jrus (me@jacobrus.com)
2018-09-24 11:20:41

in patricular, there are a few different types of plane-related objects we care about: Euclidean affine points, displacement vectors (difference between points) and other kinds of Euclidean vectors (velocity, acceleration, etc.), complex numbers (quotient of two vectors)

jrus (me@jacobrus.com)
2018-09-24 11:22:15

if we pick out an arbitrary point in the plane o, and then we pick out a particular unit vector direction x, and we pick a particular orientation I for the plane, then we can represent every point in the plane using coordinates o + x(a + Ib), where a and b are scalars

jrus (me@jacobrus.com)
2018-09-24 11:23:08

@Scott but I find it's pretty helpful to remember that a + Ib is a complex number, x(a + Ib) is a vector, and o + x(a + Ib) is a point. They can all be represented by the same pair of coordinates (a, b), but they are distinct types of objects

Scott (scott@vorthmann.org)
2018-09-24 11:23:25

Nice

jrus (me@jacobrus.com)
2018-09-24 11:23:39

same kind of story in 3D

Scott (scott@vorthmann.org)
2018-09-24 11:23:47

Right

Scott (scott@vorthmann.org)
2018-09-24 11:24:46

Got a meeting, cheers... And thank you

Scott (scott@vorthmann.org)
2018-09-24 22:10:30

@jrus I see that a+Ib and x are clearly different kinds of multivectors. But isn't the distinction between o and x (or o+x) just a convention, not a true difference? That is to say, what makes o structurally different from a vector?

jrus (me@jacobrus.com)
2018-09-24 22:10:42

hi @Scott what's up?

Scott (scott@vorthmann.org)
2018-09-24 22:14:29

just edited my question above...

jrus (me@jacobrus.com)
2018-09-24 22:15:03

@Scott o in this example is a point

jrus (me@jacobrus.com)
2018-09-24 22:15:40

some arbitrary "origin" point

jrus (me@jacobrus.com)
2018-09-24 22:15:45

it doesn't have a length

jrus (me@jacobrus.com)
2018-09-24 22:15:50

it doesn't have a direction

jrus (me@jacobrus.com)
2018-09-24 22:16:12

when you take the difference between two points you get a displacement vector

jrus (me@jacobrus.com)
2018-09-24 22:16:26

you can add affine combinations of points together to get another point

jrus (me@jacobrus.com)
2018-09-24 22:16:50

e.g. you could take 1/2(p + q), and that would be the midpoint between p and q

jrus (me@jacobrus.com)
2018-09-24 22:17:11

2**p doesn't mean anything though

Scott (scott@vorthmann.org)
2018-09-24 22:17:18

but that would work with p and q as vectors relative to (0,0,0) also

Scott (scott@vorthmann.org)
2018-09-24 22:17:34

OK

Scott (scott@vorthmann.org)
2018-09-24 22:18:21

I think I see... you can observe this distinction when doing math with pen and paper, and you can even encode the distinction in a type system

jrus (me@jacobrus.com)
2018-09-24 22:18:24

if you have a point p in the plane, a point o, a "unit vector" x, and an orientation I, then you can represent p in the form o + x(a + bI)

jrus (me@jacobrus.com)
2018-09-24 22:18:35

so you can have coordinates for it

jrus (me@jacobrus.com)
2018-09-24 22:18:47

but the point p doesn't inherently have coordinates

Scott (scott@vorthmann.org)
2018-09-24 22:19:08

yes, I got that, just still trying to shed my ingrained notion that N coordinates can equivalently be treated as a point or a vector in N-space

jrus (me@jacobrus.com)
2018-09-24 22:19:11

it so happens that in a computer we generally need to stick some coordinates in there

jrus (me@jacobrus.com)
2018-09-24 22:19:40

@Scott I'm channeling hestenes here. generally mathematicians set things up so that Euclidean points "are" vectors

Scott (scott@vorthmann.org)
2018-09-24 22:19:41

I'm crippled by thinking in computer terms

Scott (scott@vorthmann.org)
2018-09-24 22:19:48

lol

Scott (scott@vorthmann.org)
2018-09-24 22:19:58

but the rigor is useful, or Hestenes wouldn't do it

jrus (me@jacobrus.com)
2018-09-24 22:20:13

sometimes they make it so that points "are" vectors which happen to lie on a subspace not passing through the origin

jrus (me@jacobrus.com)
2018-09-24 22:21:27

@Scott it's not really about "useful" so much as "try to not confuse yourself about what is inherent vs. what is an arbitrary imposition for convenience"

Scott (scott@vorthmann.org)
2018-09-24 22:21:28

this business of affine combinations is curious, too... 1/2(p+q) is clearly the midpoint... but what is (p+q)?

Scott (scott@vorthmann.org)
2018-09-24 22:21:36

yes

jrus (me@jacobrus.com)
2018-09-24 22:21:58

well that depends on how you define + and what kind of model you are using

Scott (scott@vorthmann.org)
2018-09-24 22:22:01

I guess that is the utility I was referring to... preventing confusion

jrus (me@jacobrus.com)
2018-09-24 22:22:07

p + q is not an affine combination

jrus (me@jacobrus.com)
2018-09-24 22:22:22

you could use homogeneous coordinates

jrus (me@jacobrus.com)
2018-09-24 22:22:41

in which case points are really proportions, and any multiple yields the same thing

jrus (me@jacobrus.com)
2018-09-24 22:22:48

so then p + q would also be the midpoint

jrus (me@jacobrus.com)
2018-09-24 22:23:01

sometimes people use "weighted points" where the weight has some meaning

Scott (scott@vorthmann.org)
2018-09-24 22:23:06

projectively?

jrus (me@jacobrus.com)
2018-09-24 22:23:21

this is the main model used in computer graphics

jrus (me@jacobrus.com)
2018-09-24 22:23:30

we use coordinates (x, y, z, w)

jrus (me@jacobrus.com)
2018-09-24 22:23:36

and then always normalize w=1 before rendering

Scott (scott@vorthmann.org)
2018-09-24 22:23:42

yes, I've done that for years without a deep understanding

Scott (scott@vorthmann.org)
2018-09-24 22:24:08

learned it when I took my first course, with a 4-pen plotter

jrus (me@jacobrus.com)
2018-09-24 22:24:13

it just means that we are using 4-proportions to represent 3-dimensional points

Scott (scott@vorthmann.org)
2018-09-24 22:24:20

right

jrus (me@jacobrus.com)
2018-09-24 22:24:29

based on where they project onto the subspace where w = 1

jrus (me@jacobrus.com)
2018-09-24 22:24:48

you could alternately project them onto half of a 3-sphere or something if you wanted

jrus (me@jacobrus.com)
2018-09-24 22:25:30

the convenient thing about homogeneous coordinates is that any perspective projection becomes a linear transformation of the ambient space

jrus (me@jacobrus.com)
2018-09-24 22:25:38

so you can use a matrix

Scott (scott@vorthmann.org)
2018-09-24 22:25:40

yes

Scott (scott@vorthmann.org)
2018-09-24 22:26:35

Ok, I'll keep reading... gotta shed my Cartesian bias

Scott (scott@vorthmann.org)
2018-09-24 22:26:48

on another note...

jrus (me@jacobrus.com)
2018-09-24 22:27:10

Hestenes is coming from a physics perspective

Scott (scott@vorthmann.org)
2018-09-24 22:27:21

I'm working on generating VSON output for any 4D polytope that vZome can generate

jrus (me@jacobrus.com)
2018-09-24 22:27:23

where we don't have any way of saying that there is a correct coordinate system

jrus (me@jacobrus.com)
2018-09-24 22:27:32

we just impose one when convenient

jrus (me@jacobrus.com)
2018-09-24 22:27:38

but that's not how space is defined

Scott (scott@vorthmann.org)
2018-09-24 22:27:38

so we'll have some nice data sets to play quaternions with

jrus (me@jacobrus.com)
2018-09-24 22:27:47

okay

Scott (scott@vorthmann.org)
2018-09-24 22:29:21

are you going to Stan's on Saturday?

jrus (me@jacobrus.com)
2018-09-24 22:30:44

not sure. maybe

Scott (scott@vorthmann.org)
2018-09-24 22:31:33

if you do, can I borrow your Hestenes? I can offer a "prisoner exchange". 😉 Vince gave me a couple of nice books you may not have seen.

Scott (scott@vorthmann.org)
2018-09-24 22:33:19

feel free to say "no"... I know that is asking a lot

jrus (me@jacobrus.com)
2018-09-24 22:33:35

sure

Scott (scott@vorthmann.org)
2018-09-24 22:33:56

oh, cool

jrus (me@jacobrus.com)
2018-09-24 22:34:31

libgen has most technical books

Scott (scott@vorthmann.org)
2018-09-24 22:34:55

how do they get around copyright?

jrus (me@jacobrus.com)
2018-09-24 22:35:09

by operating out of Russia?

jrus (me@jacobrus.com)
2018-09-24 22:35:24

similar to sci-hub, but for books

jrus (me@jacobrus.com)
2018-09-24 22:35:53

I tend to buy books I want to read carefully (or even many I don’t), but it can be handy to skim through first

jrus (me@jacobrus.com)
2018-09-24 22:36:28

Elsevier might come after you for being a dirty pirate

Scott (scott@vorthmann.org)
2018-09-24 22:36:36

aarrrgh

Scott (scott@vorthmann.org)
2018-09-24 23:01:37

thank you

Scott (scott@vorthmann.org)
2018-09-24 23:02:12

I always like reading Baez. Had a nice Skype session with him once

jrus (me@jacobrus.com)
2018-09-24 23:02:21

huh

Scott (scott@vorthmann.org)
2018-09-24 23:06:03

An affine space is a torsor for a vector space.

Scott (scott@vorthmann.org)
2018-09-24 23:06:07

good stuff

Scott (scott@vorthmann.org)
2018-09-24 23:06:41

he had used vZome a little for one of his articles, and I offered to show him the 4D polytope generator

Scott (scott@vorthmann.org)
2018-09-24 23:06:51

this was when it sucked worse

Scott (scott@vorthmann.org)
2018-09-24 23:08:04

"A torsor is like a group that has forgotten its identity."

Scott (scott@vorthmann.org)
2018-09-24 23:08:12

why can't everyone write like this?!

Scott (scott@vorthmann.org)
2018-09-29 10:53:11

good morning @jrus

Scott (scott@vorthmann.org)
2018-09-29 10:53:34

I'm prepping a notebook for presenting this afternoon

Scott (scott@vorthmann.org)
2018-09-29 10:54:00

https://beta.observablehq.com/d/8d67d74f0f4d5b8b

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-09-29 10:55:47

I'd like to refine it a bit more... like combining the "phiPower" and "scale" cells into one control that directly emits a golden rational

jrus (me@jacobrus.com)
2018-09-29 21:51:05

hey @Scott. sorry, was feeling tired today after a very long day yesterday, and just stayed home and rested

Scott (scott@vorthmann.org)
2018-09-29 21:51:38

no problem... wasn't sure you were coming anyway.

Scott (scott@vorthmann.org)
2018-09-29 21:52:25

It was a pretty small group... about 9 or so.

jrus (me@jacobrus.com)
2018-09-29 21:52:59

we're driving to southern CA for a couple weeks starting tomorrow

Scott (scott@vorthmann.org)
2018-09-29 21:53:10

yes, I was wondering when

Scott (scott@vorthmann.org)
2018-09-29 21:53:13

relatives?

jrus (me@jacobrus.com)
2018-09-29 21:53:36

yao has a couple of conferences near san diego to attend, and we're going to spend other time near LA in my parents' house (they are in mexico)

Scott (scott@vorthmann.org)
2018-09-29 21:53:51

nice

Scott (scott@vorthmann.org)
2018-09-29 21:55:02

I'll try to keep a little momentum with the notebooks, but we'll see

jrus (me@jacobrus.com)
2018-09-29 21:55:22

I may have some time to work, we'll see how it goes

Scott (scott@vorthmann.org)
2018-09-29 21:56:04

have fun, and we'll catch up when you're back.

jrus (me@jacobrus.com)
2018-09-29 21:56:31

I also watched the ford/kavanaugh hearings yesterday/today. oof

Scott (scott@vorthmann.org)
2018-09-29 21:56:44

no stomach for that myself

jrus (me@jacobrus.com)
2018-09-29 21:57:09

I would urge any american who can spare the 6 hours to watch them directly

jrus (me@jacobrus.com)
2018-09-29 21:57:42

especially those who expressed support for kavanaugh

Scott (scott@vorthmann.org)
2018-09-29 22:00:05

I've caught bits, of course... cringeworthy

Scott (scott@vorthmann.org)
2018-09-29 22:00:18

too much drama

jrus (me@jacobrus.com)
2018-09-29 22:00:42

watching some short snippets really doesn't do it justice. K. went through a 3-hour tantrum

Scott (scott@vorthmann.org)
2018-09-29 22:00:51

and by that I mean acting

Scott (scott@vorthmann.org)
2018-09-29 22:01:04

wow

Scott (scott@vorthmann.org)
2018-09-29 22:01:12

that's a long time to sustain a tantrum

jrus (me@jacobrus.com)
2018-09-29 22:01:19

it reminded me very strongly of the 2-year-old I saw sobbing and struggling on thursday after his mother pulled him away from trying to push a girl off a rocking horse

jrus (me@jacobrus.com)
2018-09-29 22:01:57

of course, the 2-year-old's tantrum only lasted for about 5–10 minutes

Scott (scott@vorthmann.org)
2018-09-29 22:02:02

rofl

Scott (scott@vorthmann.org)
2018-09-29 22:02:29

you can't be a supreme court justice without more stamina than that

jrus (me@jacobrus.com)
2018-09-29 22:02:31

the GOP senators loved it

Scott (scott@vorthmann.org)
2018-09-29 22:02:46

ok, nuf politics

jrus (me@jacobrus.com)
2018-09-29 22:02:50

cheers

Scott (scott@vorthmann.org)
2018-09-29 22:02:59

Im going back to my math video 😉

Scott (scott@vorthmann.org)
2018-09-29 22:03:03

drive safely!

Scott (scott@vorthmann.org)
2018-09-29 22:03:07

or fly or whatever

jrus (me@jacobrus.com)
2018-09-29 22:03:09

will do

jrus (me@jacobrus.com)
2018-09-29 22:03:12

what's the math video?

Scott (scott@vorthmann.org)
2018-09-29 22:03:38

lots of them queued up... one of Wildberger's right now

Scott (scott@vorthmann.org)
2018-09-29 22:03:57

hypercomplex numbers

Scott (scott@vorthmann.org)
2018-09-30 22:49:49

@Roice forgot to tell you... I did make a start on porting clif4d to Observable, but it takes a lot more work than I realized. In particular, I need to get three.js to use the custom shaders.

Roice (roice3@gmail.com)
2018-09-30 22:49:55

@Roice has joined the channel

Scott (scott@vorthmann.org)
2018-10-12 00:48:18

https://beta.observablehq.com/d/22ce0c500991c645

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-10-12 00:49:05

Three.js is not so easy for doing text labels, so I encoded the indices with cone radii

Scott (scott@vorthmann.org)
2018-10-12 00:50:09
Scott (scott@vorthmann.org)
2018-10-12 00:51:34

Then I captured the indices on a printed net.

Scott (scott@vorthmann.org)
2018-10-12 00:52:06

@jrus these are your indices. Next step will be to recreate the net as SVG.

Scott (scott@vorthmann.org)
2018-10-12 09:23:49

Here is a net whose symmetries align with the indices. It will be easier to code.

Scott (scott@vorthmann.org)
2018-10-12 09:24:31
Scott (scott@vorthmann.org)
2018-10-12 19:04:34
Scott (scott@vorthmann.org)
2018-10-12 22:18:10

Going to code this up in Observable with D3... Good excuse to learn D3

Scott (scott@vorthmann.org)
2018-10-13 14:42:17
Scott (scott@vorthmann.org)
2018-10-13 14:43:09

https://beta.observablehq.com/d/e9a856ca3bdb9487

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-10-13 14:43:53

PDF version for your enjoyment

jrus (me@jacobrus.com)
2018-10-15 19:01:51

so @Scott anything exciting in the past couple weeks?

Scott (scott@vorthmann.org)
2018-10-15 19:08:39

what, my learning D3.js is not exciting enough?

Scott (scott@vorthmann.org)
2018-10-15 19:09:02

😉

jrus (me@jacobrus.com)
2018-10-15 19:09:03

I haven't been paying attention. link?

Scott (scott@vorthmann.org)
2018-10-15 19:09:26

your Slack feed should be full of it... I guess that's the downside for the free plan

Scott (scott@vorthmann.org)
2018-10-15 19:09:37

https://beta.observablehq.com/d/e9a856ca3bdb9487

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-10-15 19:09:50

sorry, thought you had all this stuff waiting for you

Scott (scott@vorthmann.org)
2018-10-15 19:09:59

try scrolling up?

Scott (scott@vorthmann.org)
2018-10-15 19:10:06

it may load if you ask it to

jrus (me@jacobrus.com)
2018-10-15 19:10:15

oh there are 2 links

jrus (me@jacobrus.com)
2018-10-15 19:10:21

I just didn't look at them

Scott (scott@vorthmann.org)
2018-10-15 19:10:31

should be two links and several images

jrus (me@jacobrus.com)
2018-10-15 19:11:11

yeah, I see the images too

Scott (scott@vorthmann.org)
2018-10-15 19:11:15

oh, good

Scott (scott@vorthmann.org)
2018-10-15 19:11:30

was I right, you don't get it unless you scroll up explicitly?

jrus (me@jacobrus.com)
2018-10-15 19:11:42

no, they came through. I just didn't look in detail

Scott (scott@vorthmann.org)
2018-10-15 19:12:06

no math, just coding

Scott (scott@vorthmann.org)
2018-10-15 19:12:09

but it was fun

Scott (scott@vorthmann.org)
2018-10-15 19:12:21

distracted me from my Celebration of Mind presentation

jrus (me@jacobrus.com)
2018-10-15 19:13:09

is that actually the order that my quaternions result in? I hadn't tried writing them down on a physical model :)

jrus (me@jacobrus.com)
2018-10-15 19:13:25

looks reasonable though

Scott (scott@vorthmann.org)
2018-10-15 19:13:30

yes, that is why I did it... was curious to see it

Scott (scott@vorthmann.org)
2018-10-15 19:14:06

and I still want to code the mapping, so this gives me firmer footing

jrus (me@jacobrus.com)
2018-10-15 19:14:46

not sure whether I would actually consider the immediately adjacent gray/white triangles to be the same number, or instead have the same number assigned to ones opposite each-other on the sphere

Scott (scott@vorthmann.org)
2018-10-15 19:15:08

Yeah, that was mostly expedient...

jrus (me@jacobrus.com)
2018-10-15 19:15:10

this way is certainly fine / logical though

Scott (scott@vorthmann.org)
2018-10-15 19:15:24

It is eminently tweakable

Scott (scott@vorthmann.org)
2018-10-15 19:15:59

I figured that the consistent text orientation gave a clue that these are the same quaternion

Scott (scott@vorthmann.org)
2018-10-15 19:16:27

you can see I did something very different in my first physical model

jrus (me@jacobrus.com)
2018-10-15 19:16:29

well what I mean is, all your white triangles seem like the labels I had

Scott (scott@vorthmann.org)
2018-10-15 19:17:00

yes

jrus (me@jacobrus.com)
2018-10-15 19:17:10

I think I might have the gray ones mirrored across. but that might not be as easy to interpret

Scott (scott@vorthmann.org)
2018-10-15 19:17:11

I just shifted the index into the neighboring gray

Scott (scott@vorthmann.org)
2018-10-15 19:17:20

let's change it

jrus (me@jacobrus.com)
2018-10-15 19:17:23

no this is fine

jrus (me@jacobrus.com)
2018-10-15 19:17:54

when mirroring across the order might not make sense

Scott (scott@vorthmann.org)
2018-10-15 19:18:04

oh, also, to be clear, the photos show your indexing with blue triangles, but I switched to gray to differentiate

jrus (me@jacobrus.com)
2018-10-15 19:18:17

I'm looking at the notebook

Scott (scott@vorthmann.org)
2018-10-15 19:18:18

in the notebook

Scott (scott@vorthmann.org)
2018-10-15 19:21:31

Oh, here is a bit of a preview of my CoM talk

Scott (scott@vorthmann.org)
2018-10-15 19:21:33

https://beta.observablehq.com/d/862720b769d3d7b0

beta.observablehq.com
jrus (me@jacobrus.com)
2018-10-15 19:21:34

@Scott anyway, great work! thanks

Scott (scott@vorthmann.org)
2018-10-15 19:21:40

thank you

jrus (me@jacobrus.com)
2018-10-15 19:22:39

nice

Scott (scott@vorthmann.org)
2018-10-15 19:23:23

I'm going to try to "spoil" Linear Algebra for middle schoolers in 6 minutes... eigenvalues, SVD, non-invertibility

jrus (me@jacobrus.com)
2018-10-15 19:23:32

cool

Scott (scott@vorthmann.org)
2018-10-15 19:23:38

all the stuff I had to learn without any visual aids

jrus (me@jacobrus.com)
2018-10-15 19:24:00

"19th century mathematicians hate this 1 weird trick"

Scott (scott@vorthmann.org)
2018-10-15 19:24:08

lmao

Scott (scott@vorthmann.org)
2018-10-15 19:24:42

OK, gotta go do dinner. Glad to have you back

jrus (me@jacobrus.com)
2018-10-15 19:24:46

cheers

Scott (scott@vorthmann.org)
2018-10-15 19:43:42

how about you, Jacob... any good reading?

jrus (me@jacobrus.com)
2018-10-15 19:44:50

I didn't really do much, but I did spend a bunch of time trying to work through http://geocalc.clas.asu.edu/pdf/DLAandG.pdf

jrus (me@jacobrus.com)
2018-10-15 19:45:04

@Scott this is the original paper about the so-called "conformal geometric algebra" model

jrus (me@jacobrus.com)
2018-10-15 19:45:40

these are somewhat tough ideas. I'm not sure what the best way is to make them accessible

jrus (me@jacobrus.com)
2018-10-15 19:46:01

well, tough for me anyway. I'm sure there are some mathematicians who think this is all trivial

Scott (scott@vorthmann.org)
2018-10-15 19:46:32

yeah, starts with outermorphisms on page two... and not a single picture

jrus (me@jacobrus.com)
2018-10-15 19:47:01

"outermorphism" just means take a linear transformation of vectors and apply it to multivectors as well

Scott (scott@vorthmann.org)
2018-10-15 19:47:03

tough for nearly anyone, I think

jrus (me@jacobrus.com)
2018-10-15 19:47:11

in the "obvious" way

Scott (scott@vorthmann.org)
2018-10-15 19:47:44

yes, I should know that... was wading through GA4P last week

jrus (me@jacobrus.com)
2018-10-15 19:48:13

i.e. where you decompose a multivector into some sum of outer products of vectors, apply the linear transformation to each vector, and then take the outer products and sums again in the same way

Scott (scott@vorthmann.org)
2018-10-15 19:48:47

a Math professor friend of mine sent me some GA papers a while back... Fontijne's thesis is pretty approachable

Scott (scott@vorthmann.org)
2018-10-15 19:49:02

I read about half of it last week

Scott (scott@vorthmann.org)
2018-10-15 19:50:44

next week I go back home to IL and IA for my 35th college reunion. I've lined up a meeting with that same professor friend, Alan Macdonald. He started teaching at my college when I was a junior... then got into GA some years later.

jrus (me@jacobrus.com)
2018-10-15 19:51:35

oh yeah

jrus (me@jacobrus.com)
2018-10-15 19:51:38

I didn't ever read his book

jrus (me@jacobrus.com)
2018-10-15 19:51:44

nice

Scott (scott@vorthmann.org)
2018-10-15 19:52:16

Pretty standard stuff, I'd say... denser than I like for casual reading, but probably acceptable as a math text.

jrus (me@jacobrus.com)
2018-10-15 19:52:16

I know hestenes has a bit of an issue, in the sense that macdonald's book starts from a linear algebra perspective, and kind of bolts GA on top of that

jrus (me@jacobrus.com)
2018-10-15 19:52:25

instead of starting with GA and extracting linear algebra from it

Scott (scott@vorthmann.org)
2018-10-15 19:52:30

yes

jrus (me@jacobrus.com)
2018-10-15 19:53:04

but probably pedagogically reasonable in a typical college course

Scott (scott@vorthmann.org)
2018-10-15 19:53:17

I poked Alan with the Wildberger stick, when I told him I was coming. He agreed to meet anyway, then proceeded to refute NW 😉

jrus (me@jacobrus.com)
2018-10-15 19:56:07

we'll try to make it to stanford on saturday. sounds fun

Scott (scott@vorthmann.org)
2018-10-15 19:56:35

excellent!

Scott (scott@vorthmann.org)
2018-10-15 19:56:49

just no heckling

Scott (scott@vorthmann.org)
2018-10-15 19:57:04

except for Simon... he has a pass

jrus (me@jacobrus.com)
2018-10-15 19:57:10

you might get a "DON'T TALK IN THE LECTURE" from Simon

Scott (scott@vorthmann.org)
2018-10-15 19:57:31

that would be a treat

Scott (scott@vorthmann.org)
2018-10-16 20:44:39
jrus (me@jacobrus.com)
2018-10-16 22:26:03

cute

Scott (scott@vorthmann.org)
2018-11-03 15:36:58

@jrus I finally finished my 4D VSON export tool... we can now play with rotations and projections of the 120-cell: https://gist.github.com/vorth/53ea8016f6df2ea27c0aa653a4c63cd9

Scott (scott@vorthmann.org)
2018-11-03 15:40:55

of course, we'll need to handle unknown orbits as soon as we do any odd rotation

Scott (scott@vorthmann.org)
2018-11-03 19:29:53

@jrus I have updated the main rendering notebook to deal with unknown orbits

Scott (scott@vorthmann.org)
2018-11-03 21:17:50

Here is my new notebook exploring rotations of the 120-cell: https://beta.observablehq.com/d/9ee20664107a443d

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-11-03 21:21:14

The rotation it is showing is an interesting one... it appears to have rotated an "odd" dodecahedron along a red axis, replacing the "even" dodecahedron at the center. Therefore it still uses some red and blue struts, but all other edges are now misaligned with the Zomeball, as if they were reflected in a red mirror.

Scott (scott@vorthmann.org)
2018-11-03 22:10:30

Hmmm... actually, every rotation I do gives me the same configuration of vertices... a central dodecahedron, etc... just oriented differently with respect to the ball orientation. This is roughly what I remember from my earlier explorations with two-sided multiplication years ago.

jrus (me@jacobrus.com)
2018-11-04 10:37:31

hi @Scott I'll take a look

jrus (me@jacobrus.com)
2018-11-04 10:39:10

@Scott are all of those struts supposed to be filled in in your notebook? or only a scattered few?

jrus (me@jacobrus.com)
2018-11-04 10:40:04

I guess when they go outside of explicitly named directions there are no struts to draw

jrus (me@jacobrus.com)
2018-11-04 10:59:48

@Scott so anyway, this is not any arbitrary 4D rotation of the shape, right? You are only doing a 1-sided quaternion multiplication

jrus (me@jacobrus.com)
2018-11-04 11:02:40

I think if you do a 2-sided multiplication you'll get different shapes

jrus (me@jacobrus.com)
2018-11-04 11:03:28

(unfortunately for most choices of 2 quaternions you'll get no struts drawn in)

Scott (scott@vorthmann.org)
2018-11-04 11:09:50

no, this is using your quattransform... 2-sided

Scott (scott@vorthmann.org)
2018-11-04 11:11:56

unfortunately I cannot experiment easily right now... my Chrome has decided it cannot do WebGL.

Scott (scott@vorthmann.org)
2018-11-04 11:23:41

I'm going to put in the code for automatic shapes, and then eventually we can generate colors for them too

jrus (me@jacobrus.com)
2018-11-04 13:22:29

@Scott oh, but quattransform is just a way to do a 3-d rotation

jrus (me@jacobrus.com)
2018-11-04 13:22:57

via sandwiching a quaternion around a vector

Scott (scott@vorthmann.org)
2018-11-04 13:23:47

Oh, is it stripping the W? Or overwriting it?

jrus (me@jacobrus.com)
2018-11-04 13:23:48

not a way to do a 4-dimensional rotation

Scott (scott@vorthmann.org)
2018-11-04 13:23:56

My mistake

jrus (me@jacobrus.com)
2018-11-04 13:24:02

it is putting a 0 in the front

Scott (scott@vorthmann.org)
2018-11-04 13:24:30

Ok. I'll make a true rotor function than

jrus (me@jacobrus.com)
2018-11-04 13:24:37

so it does Q * [0, v1, v2, v3] * Q`

jrus (me@jacobrus.com)
2018-11-04 13:25:44

if you want a 4-dimensional rotation you need to specify an 8-dimensional thing

jrus (me@jacobrus.com)
2018-11-04 13:26:28

(some possible rotations are double rotations in 2 planes)

jrus (me@jacobrus.com)
2018-11-04 13:29:11

I'm not sure what the best way is to represent arbitrary rotations for zome coordinates even in 3d though

jrus (me@jacobrus.com)
2018-11-04 13:29:37

have to think about it

jrus (me@jacobrus.com)
2018-11-04 13:30:21

@Scott the other thing you could do is take a list of vectors, and then reflect in them sequentially

Scott (scott@vorthmann.org)
2018-11-04 13:57:00

Computer rebooting, so I'm out for a walk

Scott (scott@vorthmann.org)
2018-11-04 18:47:51

Computer died

Scott (scott@vorthmann.org)
2018-11-04 21:01:52

Reshared. Conway and Smith say the general orthogonal map in 4d is a two sided quaternion multiplication.

jrus (me@jacobrus.com)
2018-11-04 21:43:24

yeah. this just isn't a very enlightening representation (from what I can tell)

Scott (scott@vorthmann.org)
2018-11-06 06:52:42

*Thread Reply:* Are you referring to the orthogonal projection? Or the Q&O book?

Scott (scott@vorthmann.org)
2018-11-04 22:07:30

Well, spent the day upgrading from Yosemite to El Capitan... I thought it was stuck, but it just took hours.

Scott (scott@vorthmann.org)
2018-11-04 22:08:06

The good news: computer is not dead. The bad news: Chrome still won't do WebGL.

jrus (me@jacobrus.com)
2018-11-04 22:53:07

:/

Scott (scott@vorthmann.org)
2018-11-09 21:08:20

@jrus I have reshared https://beta.observablehq.com/d/9ee20664107a443d

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-11-09 21:09:10

I've been playing with different L and R quaternions, and I have implemented a fairly good approximation at "hidden cell removal".

Scott (scott@vorthmann.org)
2018-11-09 21:10:16

The current state of the notebook is showing you the "green quaternion" one-sided rotation, producing the vertex-first projection of the 120-cell. Without the hidden cell removal, you would see 8 yellow struts in the center, and the dodecs would be hard to pick out

Scott (scott@vorthmann.org)
2018-11-16 23:25:31

@jrus they added merge!

Scott (scott@vorthmann.org)
2018-11-17 23:01:54

@jrus you can now fiddle with the left quaternion:

Scott (scott@vorthmann.org)
2018-11-17 23:01:55

https://beta.observablehq.com/d/9ee20664107a443d

beta.observablehq.com
jrus (me@jacobrus.com)
2018-11-18 11:51:02

hey scott. sorry for the generally slow responses

jrus (me@jacobrus.com)
2018-11-18 11:51:56

@Scott between the dog's eye surgery and the smoke and election news and general distraction I haven't been doing much useful

Scott (scott@vorthmann.org)
2018-11-18 11:52:14

np, life happens

Scott (scott@vorthmann.org)
2018-11-18 11:52:35

air is better today, at least

jrus (me@jacobrus.com)
2018-11-18 11:53:06

seems like the fire is getting toward contained

Scott (scott@vorthmann.org)
2018-11-18 11:53:46

I hope so.

jrus (me@jacobrus.com)
2018-11-18 11:54:48

did you see jashkenas's notebook from august? https://beta.observablehq.com/@jashkenas/california-fires

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-11-18 11:54:57

yes

Scott (scott@vorthmann.org)
2018-11-18 11:55:58

have to switch to my other computer to see it

Scott (scott@vorthmann.org)
2018-11-18 11:56:31

I was daydreaming of making a map mashup... my parents are headed toward Sacramento on the California Zephyr (Amtrak) right now

Scott (scott@vorthmann.org)
2018-11-18 11:56:55

satellite + camp fire + smoke + train tracker

jrus (me@jacobrus.com)
2018-11-18 11:57:00

heh

Scott (scott@vorthmann.org)
2018-11-18 11:58:37

but a lot more daydreaming about various controls re: vZome... orbit picker, number control, quaternion control, etc.

jrus (me@jacobrus.com)
2018-11-18 12:00:22

I should sit down and try to work out how to represent red-coordinate-system symmetry-preserving rotations

Scott (scott@vorthmann.org)
2018-11-18 12:01:20

sure, have some fun

Scott (scott@vorthmann.org)
2018-11-18 12:02:22

I'll have my folks for a week, but I want to keep what little momentum I have on Observable. I've been talking it up with everyone I know.

jrus (me@jacobrus.com)
2018-11-18 12:04:16

maybe I should look back at that trello page

jrus (me@jacobrus.com)
2018-11-18 12:04:23

are there any next things you want help with?

jrus (me@jacobrus.com)
2018-11-18 12:04:31

I'm going to see if I can do something useful today

jrus (me@jacobrus.com)
2018-11-18 12:05:47

what about figuring out geometry for new strut directions?

Scott (scott@vorthmann.org)
2018-11-18 12:26:56

you mean specific ones, or a generic catch-all?

Scott (scott@vorthmann.org)
2018-11-18 12:35:05

I've been meaning to translate this to Javascript... a pretty good generic parallelogram prism, independent of the algebraic field. It uses only integer coordinates. You're welcome to ignore it, of course.

Scott (scott@vorthmann.org)
2018-11-18 12:36:34

I think you should find something that you'll enjoy, regardless of utility. Of course, I think enjoyment and utility often correlate for both of us.

Scott (scott@vorthmann.org)
2018-11-18 12:39:07

Sorry, it uses only rational coordinates... I threw in the 1/10 scale to have it match the usual scale of Zome struts.

jrus (me@jacobrus.com)
2018-11-18 12:40:31

okay back

jrus (me@jacobrus.com)
2018-11-18 12:42:01

@Scott is this trying to fit struts into pentagon/rectangle/triangle holes in the nodes?

Scott (scott@vorthmann.org)
2018-11-18 12:49:25

no, no attempt to match any particular ball geometry... just focused on a reasonable cross-section to balance with modeled struts

Scott (scott@vorthmann.org)
2018-11-18 12:49:54

Yes, it would be nice to have something that looks modeled

jrus (me@jacobrus.com)
2018-11-18 12:50:14

you also have a generic strut drawing thing that matches the ball shape though right?

Scott (scott@vorthmann.org)
2018-11-18 12:50:16

that does sound like a fun project

jrus (me@jacobrus.com)
2018-11-18 12:50:22

or you did all of those manually?

Scott (scott@vorthmann.org)
2018-11-18 12:50:32

no, nothing that matches ball shape... everything like that was modeled in vZome

jrus (me@jacobrus.com)
2018-11-18 12:50:37

gotcha

Scott (scott@vorthmann.org)
2018-11-18 12:56:41

these days I stick to a roughly golden rectangle cross-section when modeling something new... I just translate the nearest blue face to the strut centerline, offset out from the ball. You could apply the same principle with "no-twist" pentagon and triangle prisms, or with decagon and hexagon prisms, computed once.

Scott (scott@vorthmann.org)
2018-11-18 12:57:07

But I should shut up and let you have fun.

jrus (me@jacobrus.com)
2018-11-18 12:57:30

you certainly have more expertise about this

jrus (me@jacobrus.com)
2018-11-18 13:03:26

time to walk the dog

Scott (scott@vorthmann.org)
2018-11-18 13:13:47

time for me to prepare for my folks. later

jrus (me@jacobrus.com)
2018-11-18 13:18:28

okay cheers

Scott (scott@vorthmann.org)
2018-11-19 19:07:10

hi @jrus

Scott (scott@vorthmann.org)
2018-11-19 19:07:17

how did you do with your project?

Scott (scott@vorthmann.org)
2018-11-19 20:59:40

@jrus I have recreated the vZome orbit triangle: https://beta.observablehq.com/d/1ffda0d4a9ec4bec

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-11-25 15:34:10

@jrus I have done some work to combine a vZome view with an orbit triangle

Scott (scott@vorthmann.org)
2018-11-25 15:34:10

https://beta.observablehq.com/d/9ee20664107a443d

beta.observablehq.com
jrus (me@jacobrus.com)
2018-11-26 14:31:51

hey @Scott sorry haven't been using this computer much. just noticed these. got some work done on my spline thing recently. haven't been looking at the zome stuff

Scott (scott@vorthmann.org)
2018-12-04 18:32:09

hi @jrus. You should check out my last notebook... I think you'll enjoy it

jrus (me@jacobrus.com)
2018-12-04 18:32:23

hi @Scott. have a link?

Scott (scott@vorthmann.org)
2018-12-04 18:32:31

above, nov 25

Scott (scott@vorthmann.org)
2018-12-04 18:32:48

https://beta.observablehq.com/d/9ee20664107a443d

beta.observablehq.com
jrus (me@jacobrus.com)
2018-12-04 18:32:50

I've been spending a bunch of time thinking about spline stuffs the past week or two

Scott (scott@vorthmann.org)
2018-12-04 18:33:02

published anything?

Scott (scott@vorthmann.org)
2018-12-04 18:33:07

having fun, good

jrus (me@jacobrus.com)
2018-12-04 18:33:58

nothing published. doing various experiments

jrus (me@jacobrus.com)
2018-12-04 18:34:04

had a chat with Raph Levien

jrus (me@jacobrus.com)
2018-12-04 18:34:51

he left his job at google a while back so has some time to work on this spline stuff again (which he mostly set aside for the past decade)

Scott (scott@vorthmann.org)
2018-12-04 18:35:06

interesting

jrus (me@jacobrus.com)
2018-12-04 18:35:15

we were bouncing some ideas around

jrus (me@jacobrus.com)
2018-12-04 18:35:54

I have some proper ideas about finishing up the missing parts of my Apollo curve notebook/paper

Scott (scott@vorthmann.org)
2018-12-04 18:36:06

nice

jrus (me@jacobrus.com)
2018-12-04 18:36:47

and he has a pretty fruitful alternative line of ideas that I think could be pretty practical as a general-purpose tool in applications like illustration or font design

Scott (scott@vorthmann.org)
2018-12-04 18:37:40

I've been largely inactive, except for the bit of Observable work I mentioned. I've also started a small in-vZome project, to improve strut design

Scott (scott@vorthmann.org)
2018-12-04 18:38:07

glad you've found a like mind... very fun

jrus (me@jacobrus.com)
2018-12-04 18:39:00

I've also been doing lots of dog/2-year-old minding

jrus (me@jacobrus.com)
2018-12-04 18:39:10

ernie had his cataract surgery 3 weeks ago

Scott (scott@vorthmann.org)
2018-12-04 18:39:21

oh, right

jrus (me@jacobrus.com)
2018-12-04 18:40:01

he's mostly doing well, but one of the meds had him peeing much more than usual without waiting to go out, which was kind of annoying...

Scott (scott@vorthmann.org)
2018-12-04 18:41:06

I imagine

Scott (scott@vorthmann.org)
2018-12-04 18:41:29

how did you know he needed the surgery?

jrus (me@jacobrus.com)
2018-12-04 18:56:55

oh it was obvious that he had one cataract, and it was obvious that he couldn't see much

jrus (me@jacobrus.com)
2018-12-04 18:57:04

but actually both eyes had cataracts

jrus (me@jacobrus.com)
2018-12-04 18:57:25

one got replaced with a plastic lens. the other eye they just removed the lens

Scott (scott@vorthmann.org)
2018-12-04 18:57:25

ok

Scott (scott@vorthmann.org)
2018-12-29 12:39:27

Hey @Roice, FYI, today I'm working on porting clif4d to ES2015 and three.js and Observable

Scott (scott@vorthmann.org)
2018-12-31 21:46:29

@channel I have published a new notebook about finding golden numbers in the interval [0,1]. I plan to use these functions to "snap" 4D floating point rotation matrices or quaternions to golden number equivalents.

Scott (scott@vorthmann.org)
2018-12-31 22:16:43

https://beta.observablehq.com/@vorth/finding-golden-numbers

beta.observablehq.com
Scott (scott@vorthmann.org)
2018-12-31 22:18:11

@channel I have also published the Clifford torus notebook that @Roice and I worked on: https://beta.observablehq.com/@vorth/clif4d-a-track-torus

beta.observablehq.com
jrus (me@jacobrus.com)
2019-01-02 21:33:33

hey @Scott, we are back to SF

Scott (scott@vorthmann.org)
2019-01-02 21:34:04

great! welcome back. Want a demo?

jrus (me@jacobrus.com)
2019-01-02 21:34:15

sure

Scott (scott@vorthmann.org)
2019-01-02 21:34:38

how did we screenshare last time? not Slack

Scott (scott@vorthmann.org)
2019-01-02 21:34:43

neither of us has paid

Scott (scott@vorthmann.org)
2019-01-02 21:34:47

join.me I guess

Scott (scott@vorthmann.org)
2019-01-02 21:35:07

I need to download it on this Mac

jrus (me@jacobrus.com)
2019-01-02 21:35:21

something like that

Scott (scott@vorthmann.org)
2019-01-02 21:35:51

just need a minute...

Scott (scott@vorthmann.org)
2019-01-02 21:40:48

https://join.me/807-057-435

join.me
Scott (scott@vorthmann.org)
2019-01-02 21:42:53

I'm in, @jrus

Scott (scott@vorthmann.org)
2019-01-02 21:44:01

did I miss my window? 😉

jrus (me@jacobrus.com)
2019-01-02 21:51:40

@Scott hey, back

jrus (me@jacobrus.com)
2019-01-02 21:51:42

sorry

Scott (scott@vorthmann.org)
2019-01-02 21:52:20

np. chatting with Lia about SnapChat

Scott (scott@vorthmann.org)
2019-01-02 21:52:28

meta-chatting

Scott (scott@vorthmann.org)
2019-01-02 21:53:14

and now chatting about meta-chatting

Scott (scott@vorthmann.org)
2019-01-02 21:53:54

do you see the join.me link?

jrus (me@jacobrus.com)
2019-01-02 21:53:55

@Scott join.me says "updating"

Scott (scott@vorthmann.org)
2019-01-02 21:54:00

ohhh

jrus (me@jacobrus.com)
2019-01-02 21:54:03

might take a minute or two

Scott (scott@vorthmann.org)
2019-01-02 21:54:08

sure np

jrus (me@jacobrus.com)
2019-01-02 21:55:00

@Scott I didn't realize, apparently I was on a join.me "pro" trial which has now ended

Scott (scott@vorthmann.org)
2019-01-02 21:55:12

yes, 30 days automatic

Scott (scott@vorthmann.org)
2019-01-02 21:55:19

they said the same to me

jrus (me@jacobrus.com)
2019-01-02 21:55:49

not sure there was actually any different feature. I think that message might just be made up

Scott (scott@vorthmann.org)
2019-01-02 22:55:18

well, I did have the use of "@vzome" or something as a channel name, for a month, when I first signed up... but that was 2-3 years ago

Scott (scott@vorthmann.org)
2019-01-02 22:55:48

I think they tried to hook me again recently, by reviving that trial, and the channel name, for 30 days

Scott (scott@vorthmann.org)
2019-01-04 21:41:25

@channel I have been playing with the stereographic projection for generating golden vectors that lie on a circle: https://beta.observablehq.com/d/be0be1908e0c1255

beta.observablehq.com
Scott (scott@vorthmann.org)
2019-01-04 21:42:25

So far, it is fun but ultimately still disappointing. It appears that I cannot generate "nice" vectors... I miss all the blue-plane orbits. Just look at those denominators!

jrus (me@jacobrus.com)
2019-01-05 10:16:23

@Scott you want to use arbitrary golden-rational points on the line

jrus (me@jacobrus.com)
2019-01-05 10:16:53

so like 1/2, φ/2, (1 + φ)/2, ...

Scott (scott@vorthmann.org)
2019-01-05 10:17:13

even so I think it is impossible to come up with a circle point that is on a slope of 1/phi, for example

jrus (me@jacobrus.com)
2019-01-05 10:17:28

why?

Scott (scott@vorthmann.org)
2019-01-05 10:18:16

looking at my inverse projection, if I want a ratio of 1:φ, then I need a square root of 2+φ... which is not a perfect square

jrus (me@jacobrus.com)
2019-01-05 10:19:48

oh that's true, yeah you actually want to have arbitrary points such that their square is a golden rational

jrus (me@jacobrus.com)
2019-01-05 10:20:24

I have to play with simon. I'll maybe think about it a bit later. no promises though

Scott (scott@vorthmann.org)
2019-01-05 10:20:30

ok, np

Scott (scott@vorthmann.org)
2019-01-05 10:20:32

thx for the input

jrus (me@jacobrus.com)
2019-01-05 10:22:19

@Scott maybe better to skip the stereographic projection per se and just rotate & scale the vector (1, 0) to point at an arbitrary (x, y)

Scott (scott@vorthmann.org)
2019-01-05 10:22:30

yes

Scott (scott@vorthmann.org)
2019-01-05 10:23:42

but it was a fun exercise... wouldn't have guessed I could draw a circle

Scott (scott@vorthmann.org)
2019-01-05 10:24:11

neat how the stereographic projection is invertible without sqrt, whereas the gnomonic is not

Scott (scott@vorthmann.org)
2019-01-05 10:25:17

so one could do inverse stereographic with rationals

jrus (me@jacobrus.com)
2019-01-05 12:02:44

@Scott yeah, any time you have purely rational points on a conic section, you can map them to rational points on a line. no need for square roots

jrus (me@jacobrus.com)
2019-01-05 12:04:13

@Scott this is why https://en.wikipedia.org/wiki/Conformal_geometric_algebra is such a neat tool

} Wikipedia (https://en.wikipedia.org/)
jrus (me@jacobrus.com)
2019-01-05 12:05:59

“fractional linear transformations” (“Möbius transformations) like circle inversions, etc. can accomplish a lot

Scott (scott@vorthmann.org)
2019-01-05 12:49:30

nice. Yes, was thinking of the conformal GA model earlier. Not ready to go there yet, but I do need to find a different approach for my 4d-polytope rotation project

Scott (scott@vorthmann.org)
2019-01-05 12:50:26

today I have shifted gears, to port my "white strut" geometry to Observable

jrus (me@jacobrus.com)
2019-01-05 12:50:35

nice!

Scott (scott@vorthmann.org)
2019-01-05 12:50:36

not too hard

Scott (scott@vorthmann.org)
2019-01-05 20:00:09

done

Scott (scott@vorthmann.org)
2019-01-05 20:00:27

https://beta.observablehq.com/@vorth/a-shape-for-white-struts

beta.observablehq.com
jrus (me@jacobrus.com)
2019-01-06 15:48:40

@Scott is there an example 3d model?

jrus (me@jacobrus.com)
2019-01-06 15:50:37

oh, maybe https://beta.observablehq.com/@vorth/exploring-4d-quaternion-rotations are now updated, etc?

beta.observablehq.com
Scott (scott@vorthmann.org)
2019-01-06 15:51:41

yes

jrus (me@jacobrus.com)
2019-01-06 15:51:48

nice

Scott (scott@vorthmann.org)
2019-01-06 15:52:12

thanks

Scott (scott@vorthmann.org)
2019-01-06 19:09:27

@jrus just published another take on the orbits sphere: https://beta.observablehq.com/@vorth/vzome-icosahedral-orbits

beta.observablehq.com
Scott (scott@vorthmann.org)
2019-01-06 19:10:34

I still want to do the SVG gnomonic projection, with the ability to toggle poles/circles on and off. This will do for now

Scott (scott@vorthmann.org)
2019-01-06 19:11:02

I was interested in seeing which intersections lead to some of the white orbits in my other notebook.

jrus (me@jacobrus.com)
2019-01-06 19:11:18

@Scott whoa, zooming into the sphere is trippy

Scott (scott@vorthmann.org)
2019-01-06 19:12:03

Yes, I don't have an easy way to truncate those cones.

jrus (me@jacobrus.com)
2019-01-06 19:12:12

it's fine to leave them

Scott (scott@vorthmann.org)
2019-01-06 19:12:22

yes, harmless

Scott (scott@vorthmann.org)
2019-01-06 19:12:58

I may ask you for some new colors, to assign to a few of the new orbits

Scott (scott@vorthmann.org)
2019-01-06 19:17:49

Never mind... seems there is little correlation between the white orbits used and the intersections rendered above.

Scott (scott@vorthmann.org)
2019-01-06 19:18:09

From what I can tell.

Scott (scott@vorthmann.org)
2019-02-16 12:15:04

Hey @Roice… want to port some of your stuff to Observable? This might help: https://beta.observablehq.com/@renatoppl/hyperbolic-plane

beta.observablehq.com
Roice (roice3@gmail.com)
2019-02-17 13:35:02

Thanks @Scott!

John Kostick (jjkostick@verizon.net)
2020-05-22 13:58:23

@John Kostick has joined the channel

John Kostick (jjkostick@verizon.net)
2020-05-22 14:03:01

Still just getting set up, listening in . I like the name observable.

Scott (scott@vorthmann.org)
2020-05-22 14:04:52

It’s a great platform, a good medium for sharing

Jackpike (j-hall20@sky.com)
2021-01-17 08:55:35

@Jackpike has joined the channel

Jackpike (j-hall20@sky.com)
2021-01-17 09:01:19

@Jacob Kandel Hi Jacob I am going to have a look at "forking?" your 4D polytopes observable page if you don't mind.

raynovo (raynovo@gmail.com)
2021-01-17 09:53:27

@raynovo has joined the channel

Chris K. Palmer (chriskpalmer12@gmail.com)
2021-01-28 11:09:07

@Chris K. Palmer has joined the channel